ホームページ > バックエンド開発 > PHPチュートリアル > 可逆文字列暗号化アルゴリズムの専門家を求めています

可逆文字列暗号化アルゴリズムの専門家を求めています

WBOY
リリース: 2016-06-23 14:23:06
オリジナル
1653 人が閲覧しました

漢字 (厳密な要件ではありません)、英数字、小数点などをサポートする必要があります。暗号化された文字列は数字と文字で構成されます。暗号化後も暗号化前と同じ長さであることが最善です。
「www」など。暗号化前の .qq.com" 文字列


ディスカッションへの返信 (解決策)

同じことが当てはまる場合は、最も単純な置換アルゴリズムを検討できます。置換ルールは自分で定義できます

同じことが当てはまる場合は、最も単純な置換アルゴリズムを検討できます。置換ルールは自分で定義できます。コードはありますか?

漢字を考慮しない場合は、シーザー暗号化を使用してください。

$s = 'www.qq.com~';$k = 13;//加密for($i=0; $i<strlen($s); $i++) {  $n = ord($s{$i}) + $k;  if($n > 126) $n = ($n + 32) & 0x7f;  $s{$i} = chr($n);}echo $s, PHP_EOL; //$$$;~~;p|z+//解密for($i=0; $i<strlen($s); $i++) {  $n = ord($s{$i}) - $k;  if($n < 32) $n = ($n - 32) & 0x7f;  $s{$i} = chr($n);}echo $s; //www.qq.com~
ログイン後にコピー
ログイン後にコピー

中国語の文字を考慮しない場合は、Caesar 暗号化を使用してください。この方法は優れていますが、暗号化された文字列には数字と文字のみを含めることができます。

漢字を考慮しない場合は、Caesar 暗号化を使用してください

$s = 'www.qq.com~';$k = 13;//加密for($i=0; $i<strlen($s); $i++) {  $n = ord($s{$i}) + $k;  if($n > 126) $n = ($n + 32) & 0x7f;  $s{$i} = chr($n);}echo $s, PHP_EOL; //$$$;~~;p|z+//解密for($i=0; $i<strlen($s); $i++) {  $n = ord($s{$i}) - $k;  if($n < 32) $n = ($n - 32) & 0x7f;  $s{$i} = chr($n);}echo $s; //www.qq.com~
ログイン後にコピー
ログイン後にコピー

たとえば、「abcdefghijklmnopqrstuvwxyz1234567890_-.」という文字列は、暗号化された後は文字列のみで構成され、数字、-、_、で構成されます。小数点は別のものに変換されます

正しく読めば、ご要望は「暗号化された文字列は数字と文字で構成されています」ということになります
この「文字」で何ができるのかわかりません

英数字の範囲を超える文字は、長さを変えずに英数字で表す必要があります
「象を冷蔵庫に入れる」は単なる冗談ですが、本気で受け止めますか?

生成された文字列に英数字のみが含まれている場合、赤色の文字の条件に従って青色の文字の要件を満たすことは不可能です

漢字 (厳密な要件ではありません)、英数字、小数点をサポートする必要がありますなど。暗号化された文字列は数字と文字で構成されます。暗号化後も暗号化前と同じ長さにするのが最善です

暗号化前の「www.qq.com」文字列など

英数字の範囲を超える文字は、英数字で表され、長さは変更してはなりません
" 「象を冷蔵庫に入れる」は単なる冗談ですが、本気で受け止めますか?

Base64 は「abcdefghijklmnopqrstuvwxyz1234567890_-.」を純粋な数字と文字に変換できませんか?多少長くても大丈夫ですが、base64だと長すぎる気がします

生成される文字列が英数字のみの場合、赤文字部分の条件から青文字の要件を達成することは不可能です

漢字 (厳密な要件ではありません)、文字、数字、小数点などをサポートする必要があります。暗号化された文字列は、暗号化後も暗号化前と同じ長さになることが最善です
たとえば。 、暗号化前の「www.qq.com」文字列

多少長い長さでも問題ありません

バイトのビット知識を理解していれば、base64 が視覚的な非圧縮暗号化の限界であることがわかります。短くしてください。使用できるのは圧縮アルゴリズムのみです

英数字の範囲を超える文字は英数字で表す必要があり、長さは変更しないでください
「象を冷蔵庫に入れる」は単なる冗談ですよね。真面目に受け取る?

Base64 は「abcdefghijklmnopqrstuvwxyz1234567890_-.」を純粋な数字と文字に変換できませんか?多少長くても大丈夫ですが、base64は長すぎる気がします

1バイトで表現できる状態は256個までです
すべての圧縮アルゴリズムは、連続した同一のフラグメントをカウント+フラグメントの形式で保存します
したがって、圧縮はサイズはいつでも縮小できます

Base64 変換には / と = も含まれます
-_ に置き換える必要があります
ただし、base64 は漢字などのあらゆるデータを変換でき、3 文字ごとに 4 文字になり、1/3 長くなります。元の投稿者はもったいないと思ったのでしょう。

は、指定された文字のみを変換するように変更する必要があります。
少なくとも、合計 65 個の有効な文字を変換できる必要があります。
出力にはドットを含めることはできません。有効な文字は合計 64 個あり、理論的には少なくとも 1/64 長くなります。



Base64 変換には / と = も含まれます
は -_ に置き換える必要があります
ただし、base64 は漢字などのあらゆるデータを変換でき、3 文字ごとに 1/3 長い 4 文字になります。元の投稿者はもったいないと思ったのでしょう。

は、指定された文字のみを変換するように変更する必要があります。
少なくとも、合計 65 個の有効な文字を変換できる必要があります。
出力にはドットを含めることはできません。有効な文字は合計 64 個あり、理論的には少なくとも 1/64 長くなります。 理論的には、長さが1/64であればアルゴリズムを求めることも可能です

シフトアルゴリズムは実装可能です

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート