php 的加密问题


Encryption issue with php

在服务器上进行AES256加密,在ios上进行解密。这在很长一段时间内都没有奏效,但我决定在加密之前对文本进行 base 64 编码以加密。

我不小心在base64_encode($source)周围戴上了牙套,这开始工作了。所以现在这个错误的代码工作(在ios上解密得很好):

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, "base64_encode($source)", MCRYPT_MODE_CBC, $iv);

正确的事情根本不起作用:

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, base64_encode($source), MCRYPT_MODE_CBC, $iv);

使用蛋糕 php 如果这有所作为。什么是错的,有什么区别?为什么大括号使事情起作用,而没有大括号,它只是在解密时失败?对不起,如果这是一个非常愚蠢的问题,但我是密码学的新手。

你应该对纯文本进行字符编码(例如,使用 UTF-8,PHP 中有一个 utf8 编码函数),然后 base64 编码结果,如果你想将结果传输为字符串。

请注意,mcrypt_encrypt() 的输出与随机字节无法区分。这意味着可以输出任何字节,包括那些不是有效字符编码的字节(例如 00h 值字节或 C 中的 EOF)。由于 IV 是随机的(希望如此),有时一切都会显得桃色,有时您的解密会因为无效字符而失败。

使用加密,如果您不能完全控制(字符)编码/解码原理(不是那么多加密/解密),那么您可能会偶尔得到意想不到的结果 - 这正是您在编程时需要避免的事情。