ホームページ >バックエンド開発 >PHPチュートリアル >可逆暗号化アルゴリズムを探していますが、要件は少し高いです
要件:
1. 暗号化後の長さは暗号化前の長さと同じです
2. 暗号化された文字列には a から z までの文字と 0 から 9 までの数字のみが許可されます
3. 暗号化された文字列に基づいて再計算できます秘密鍵 戻ってきてください
暗号化前の文字列も文字と数字の組み合わせです
暗号化前の文字列など: us3kqvu
シーザー暗号化とバリア暗号化を試したり、 2 つの方法 すべて使用してください
Caesar Cipher
$key = '3ae';$s = caesar_encode('us3kqvu', $key);echo "$s\n";echo caesar_decode($s, $key);function caesar_encode($s, $k) { $k = "$k"; for($i=0; $i<strlen($k); $i++) { $d = base_convert($k{$i}, 36, 10); $t = ''; for($j=0; $j<strlen($s); $j++) $t .= base_convert((base_convert($s{$j}, 36, 10)+$d)%36, 10, 36); $s = $t; } return $t;}function caesar_decode($s, $k) { $k = "$k"; for($i=0; $i<strlen($k); $i++) { $d = 36 - base_convert($k{$i}, 36, 10); $t = ''; for($j=0; $j<strlen($s); $j++) $t .= base_convert((base_convert($s{$j}, 36, 10)+$d)%36, 10, 36); $s = $t; } return $t;}ciphertext: ljubhml
Caesar Cipher
$key = '3ae';$s = caesar_encode('us3kqvu', $key);echo "$s\n";echo caesar_decode($s, $key);function caesar_encode($s, $k) { $k = "$k"; for($i=0; $i<strlen($k); $i++) { $d = base_convert($k{$i}, 36, 10); $t = ''; for($j=0; $j<strlen($s); $j++) $t .= base_convert((base_convert($s{$j}, 36, 10)+$d)%36, 10, 36); $s = $t; } return $t;}function caesar_decode($s, $k) { $k = "$k"; for($i=0; $i<strlen($k); $i++) { $d = 36 - base_convert($k{$i}, 36, 10); $t = ''; for($j=0; $j<strlen($s); $j++) $t .= base_convert((base_convert($s{$j}, 36, 10)+$d)%36, 10, 36); $s = $t; } return $t;}ciphertext: ljubhml
いわゆる「移動文字テーブルマッピング」とは例えば
原文 abcd
移動距離 4
暗号文 efgh
したがって、マッピング テーブルを使用すると、6 桁に圧縮できます
6 桁を 6 桁に変換するには、多くのビット演算があります、英数字へのマッピングを選択して逆にすることができます
上記のプロセスは元に戻すことができます