01/10/2018, 09:27
Thuận Toán Mã Hóa Dữ Liệu
Thằng bạn nhờ em nghĩ một cái thuật toán để mã hóa dữ liệu mà không ai decode được e bảo nó dùng hash nó không chịu thế rồi e viết ra cái này
function _encode($str)
{
$str_en = ';
$validChar = array('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm',
'1', '2' ,'3', '4', '5', '6', '7', '8', '9', '0');
for ($ch = 0; $ch < strlen($str); $ch++)
{
$char = $str[$ch];
$value = unpack('H*', $char);
$piece = substr(base_convert($value[1], 16, 2), 4);
$encoded = ';
for ($i = 0; $i < 2; $i++)
{
for ($j = 0; $j < 2; $j++)
{
for ($k = 0; $k < 2; $k++)
{
for ($l = 0; $l < 2; $l++)
{
$en = pack('H*', base_convert($i.$j.$k.$l.$piece, 2, 16));
if (empty(array_search($en, $validChar)))
{
continue;
}
else if ($en == $char)
{
continue;
}
else
{
$encoded .= $en;
}
}
}
}
}
$str_en .= $encoded;
}
return $str_en;
}
và kết quả
Cách này là e lấy 3 kí tự của một kí tự input rồi hoán vị các kí tự 0
và 1
ở 4 vị trí đầu rồi rồi kiểm tra nếu nó không phải là kí tự lạ thì cho vào. Nhưng nó nói với e là vậy vẫn còn rất dài. Nên e mong các anh chị có kinh nghiệm cho e cái gợi ý nào đó.
E cám ơn ạ.
Bài liên quan
Vấn đề là yêu cầu của nó là gì. Tại sao nó không chịu.
Và nó muốn mã hoá công khai hay mã hoá bí mật.
dạ mã hóa bí mật. vấn đề là muốn mã hóa dữ liệu để lưu database rồi có thể decode ra mà thuật toán lại phải ngắn nữa ạ
Thế thì em dùng luôn AES đi, chuẩn mã hoá quốc phòng của Mỹ :))
trời nó dài hơn của e nữa
Ừa, phức tạp thì mới dài chứ sao. Không thì anh cho em một thuật toán mã hoá rất ngắn nhé, nhưng mà chắc là dễ bị phá lắm. Bài tập trên CodeFights chỉ mới dùng được cho bảng chữ cái lowercase trong ASCII. Anh sửa lại để dùng được với toàn bộ ASCII. (C#)
Em nếu em đùng
Decode()
để encode thì dùngEncode()
để decodeCòn muốn chơi cả Unicode thì thay 128 thành 65536
Base64 với custom table thử xem, có hàm sẵn ráp cái bụp là xong :?
https://ideone.com/QBSgrr
Lúc này đòi hỏi phải có custom table mới decode được. Nhưng nếu ai quen dạng này rồi thì có thể tạo lại custom table
Cái này để obfuscate chứ mã hóa gì chời :shrug:
(spoiler) code này chỉ lấy nibble thấp rồi ráp thêm nibble cao ở đâu đó vào cho thành alphanumeric. Sao không dùng thao tác bit ấy.
Mà không ai decode cũng đúng vì mất thông tin rồi còn đâu =)) mã hóa là việc nghiêm túc chứ không phải như chơi đồ hàng.
Thử implement mã hóa Enigma đi , đừng mắc sơ hở như phe px thì cực kì an toàn nhé
Key space của Enigma từ 63 đến 71 bit thôi chưa kể cấu trúc nội tại của nó.