Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对字符串中的数字进行编码,然后对其进行解码?_Php_Encoding_Encryption_Decoding - Fatal编程技术网

Php 如何对字符串中的数字进行编码,然后对其进行解码?

Php 如何对字符串中的数字进行编码,然后对其进行解码?,php,encoding,encryption,decoding,Php,Encoding,Encryption,Decoding,我正在寻找加密/解密功能,将编码数字0,1,2。。。转换为字符串,使这些字符串看起来是随机的,然后数字可以从字符串中解码回来 例如:3将加密为ABFQWEMasdEE,6将加密为poad_Asd@sad. 如果我能控制加密字符串中的字符数,以及哪些字符可以出现在那里,那就太棒了 更新 我最终得到了这个解决方案: <?php $key = 'secret_password'; for ($i = 100; $i < 110; $i++) { $text = "$i"

我正在寻找加密/解密功能,将编码数字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][9ua0maq3mgp0czmowcopg=][100]正常 [101][Y5WKH7J1+k0bFqsGw1jmrA==][101]正常 [102][NqV2opJc7CNq5O3lcuWKMw==][102]正常 [103][1FPJHE+vrK6aKA54VR53Q=][103]好的 [104][MHQoYCqL4yCI9jKg1U0UYw==][104]正常 [105][6Qq9aXEn46xpDgv8CvnK7Q==][105]正常 [106][UGk1/byT7wpoFM59Uy/pdg==][106]正常 [107][39kyPA49zAZsCFx3pt6bYw=][107]好的 [108][YccDSimEf3C0NKDaVOf4kA=][108]好的 [109][PfmvLfVR4+gi9y9v/6efZQ==][109]正常 *****嗯******

字符串看起来是随机的,除了结尾的==和大小相同的字符串。不是完美的解决方案,但已经足够好了


谢谢大家

您可以使用sha1函数进行编码 选中此项: 或者你也可以使用这个链接


查看base64_encode和base64_decode。

您可以使用PHP的一个加密函数对数据进行加密,然后使用将其编码为可以作为文本发送的字符串。

查看Pear包。您可以使用它加密/解密任意字符串。它使用XXTEA分组密码算法参见维基百科上的XXTEA。如果你想有一个好的格式,你可以对加密的输出进行额外的UU编码。

使用类似rot13的简单方法,并在每个数字上附加一组额外的字符。是的,这是一种非常弱的加密形式,但它解决了这个问题,您可以使输出匹配您想要的任何内容


如果用户想要更复杂的内容,请尝试使用tweber的答案,但这样就无法真正控制字符串输出的长度或随机性。

将任意长度的输入转换为固定长度的输出通常是哈希函数的属性,而不是加密函数。哈希函数通常不是双射函数。他想要的东西是可逆的。@Amadan是的,可逆加密通常不是固定长度的。检查这个问题:@deceze:我不确定找不到方案。显然,固定长度的密码文本对编码的数字施加了限制。例如,如果您将0-255转换为000-255或00000000-11111111,则会得到固定长度的明文,因此期望固定长度的密码文本并非不合理。诀窍在于如何使它看起来足够随机,而且是可逆的。我的数学能力很弱。答案只是为了编码。OP特别要求一个可以反转的函数。散列!=编码!=加密。这是三个不同的概念,不能被视为可互换的。当您可以使用像Rijndael AES这样经过验证的方案时,为什么要使用它呢?并不是说XXTEA不好,它只是不像AES那样经过战斗考验。多字母密码是个糟糕的主意。