ホームページ >バックエンド開発 >PHPチュートリアル >可逆暗号化アルゴリズムを探していますが、要件は少し高いです

可逆暗号化アルゴリズムを探していますが、要件は少し高いです

WBOY
WBOYオリジナル
2016-06-23 14:17:201250ブラウズ

要件:
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
原文: us3kqvu

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
原文: us3kqvu
この暗号化および復号化方法には反復の可能性が高くなりますか?

シーザー暗号 文字を移動させる テーブルマッピングで実現、理論的には重複の可能性なし


いわゆる「移動文字テーブルマッピング」とは例えば
原文 abcd
移動距離 4
暗号文 efgh

1 バイトは 8 ビット(ビット)、6 ビット 2^6=64 の可能性があり、合計 62 文字 + 数字

したがって、マッピング テーブルを使用すると、6 桁に圧縮できます

6 桁を 6 桁に変換するには、多くのビット演算があります、英数字へのマッピングを選択して逆にすることができます

上記のプロセスは元に戻すことができます

シーザー暗号化とバリア暗号化

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。