数値 (0、1、2、...) を文字列にエンコードする暗号化/復号化関数を探しています。これにより、これらの文字列はランダムに見え、後で数値が文字列からデコードされる可能性があります。
例: 3 は ABFQWEMasdEE に暗号化され、6 は poad_Asd#@sad に暗号化されます。
暗号化された文字列の文字数と、そこに表示される文字を制御できれば、それは素晴らしいことです!
アップデート
私はこの解決策で終わります:
<?php
$key = 'secret_password';
for ($i = 100; $i < 110; $i++) {
$text = "$i";
$encrypted = encrypt($text, $key);
$decrypted = decrypt($encrypted, $key);
$decrypted = rtrim($decrypted, "\0");
$ok = ($text === $decrypted);
if (!$ok) {
exit('********** BUG BUG BUG BUG BUG ***********');
}
echo '[' . $text . '] [' . $encrypted . '] [' . $decrypted . '] ' . ($ok ? 'OK' : 'BUG BUG BUG BUG BUG BUG BUG') . '<br />';
}
exit('***** OK ******');
function encrypt($data, $key) {
$td = mcrypt_module_open('cast-256', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode($encrypted_data);
}
function decrypt($encoded_64, $key) {
$td = mcrypt_module_open('cast-256', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$decrypted_data = mdecrypt_generic($td, base64_decode($encoded_64));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $decrypted_data;
}
?>
次の出力が提供されます。
[100] [9UA0Maq3MGp0CzMOWcpOpg==] [100] OK
[101] [Y5WKH7J1+k0bFqsGw1jmrA==] [101] OK
[102] [NqV2opJc7CNq5O3lcuWKMw==] [102] OK
[103] [1FpJhHe+vrK6aKA54VR53Q=] ] OK
[104] [MHQoYCqL4yCI9jKg1U0UYw==] [104] OK
[105] [6Qq9aXEn46xpDgv8CvnK7Q==] [105] OK
[106] [UGk1/byT7wpoFM59Uy/pdg==] [106] OK
[107] [39kyPA49zAZsCFw=3pt6] [107] OK
[108] [YccDSimEf3C0NKDaVOf4kA==] [108] OK
[109] [PfmvLfVR4+gi9y9v/6efZQ==] [109] OK
***** OK ******
文字列はランダムに見え (==
最後の を除く)、すべて同じサイズです。完全な解決策ではありませんが、十分です!
皆さん、ありがとうございました !!