有人可以就“使用密钥在php5中对utf-8字符串进行简单加密/解密”这个主题提出建议吗?关于独立图书馆的一些建议? (不依赖于32/64位机器)。
$encryptedTextUTF8 = simpleEncrypt($originalTextUTF8, $secret);
echo simpleDecrypt($encryptedTextUTF8, $secret); // outputs $originalTextUTF8
答案 0 :(得分:2)
使用mcrypt扩展程序:http://us.php.net/manual/en/book.mcrypt.php 像下面这样的东西是可行的:
$pass = 'password_string_to_be_encrypted';
$string = 'password_string_to_be_decrypted';
$salt = 'your_salt';
$pepper = 'your_extra_salt';
$encrypted = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $salt . $pass . $pepper ), $string, MCRYPT_MODE_CBC, md5( md5( $salt . $pass . $pepper ))));
$decrypted = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5($salt . $pass . $pepper), base64_decode( $string ), MCRYPT_MODE_CBC, md5( md5( $salt . $pass . $pepper))), "\0");
编辑:验证错误,我建议删除md5部分的加密。至于什么更好,我还不知道,但是当我有足够的时间调查时,我会尝试更新我的帖子..对不起! :)
答案 1 :(得分:1)
PHP字符串不知道(或关心)它们的字符编码是什么。它们只是一个字节集合。这使您完全不必担心UTF-8。
因为您要求对称密钥加密,所以您可能希望使用the mcrypt extension。它有a wide variety of cyphers可用,包括AES(“Rijndael”)。 Mcrypt本身并不关心它是否在32位或64位机器上。
我不打算提供示例代码,因为使用加密需要一些非平凡的知识,我不确定我可以在单独的代码中正确解释,以及复制粘贴加密代码是一个糟糕的坏主意。
Understanding how block cypher modes of operation work会帮助您选择正确的模式。如果您希望将其他语言开发的程序与加密数据一起使用,那么这种理解也是必要的,因为它们将使用不同的默认密码模式和不同的padding schemes。