我正在寻找将数字(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]确定
[101] [Y5WKH7J1 + k0bFqsGw1jmrA ==] [101]确定
[102] [NqV2opJc7CNq5O3lcuWKMw ==] [102]确定
[103] [1FpJhHe + vrK6aKA54VR53Q ==] [103]确定
[104] [MHQoYCqL4yCI9jKg1U0UYw ==] [104]确定
[105] [6Qq9aXEn46xpDgv8CvnK7Q ==] [105]确定
[106] [UGk1 / byT7wpoFM59Uy / pdg ==] [106]确定
[107] [39kyPA49zAZsCFx3pt6bYw ==] [107]好的
[108] [YccDSimEf3C0NKDaVOf4kA ==] [108]确定
[109] [PfmvLfVR4 + gi9y9v / 6efZQ ==] [109]确定
***** OK ******
字符串看起来是随机的(除了最后的==
)并且所有字符都相同。不完美的解决方案,但足够好!
谢谢大家!!
答案 0 :(得分:2)
您可以使用PHP的加密函数之一(mcrypt)来加密您的数据,然后使用base64_encode将其编码为可以作为文本发送的字符串。
答案 1 :(得分:0)
查看base64_encode
和base64_decode
。
答案 2 :(得分:0)
查看Crypt_XXTEA梨包。您可以使用它加密/解密任意字符串。它使用XXTEA分组密码算法(参见维基百科的XXTEA)。如果你想要一个“漂亮”的格式,你可以另外对加密的输出进行编码。
答案 3 :(得分:0)
使用像rot13这样简单的东西,并为每个数字添加一组额外的字符。是的,这是一种非常弱的加密形式,但它解决了这个问题,你可以使输出匹配你想要的。
如果用户想要更复杂的东西,那么尝试使用tweber的答案,但是你无法真正控制字符串输出的长度或随机性。
答案 4 :(得分:-3)
您可以使用编码所需的编码 sha1 功能 检查一下: http://php.net/manual/en/function.sha1.php 或者您也可以使用此链接