【发布时间】:2015-03-12 00:15:06
【问题描述】:
我需要一对 PHP 脚本中的对称加密和解密。我正在使用 mcrypt_encrypt 和 crypt_decrypt。为了测试这一点,我有以下代码:
$encrypted_token = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $ENCRYPTION_SECRET, $refresh_token, MCRYPT_MODE_ECB);
$encrypted_encoded_token=base64_encode($encrypted_token);
echo "\nEncrypted Token: " . $encrypted_encoded_token . "\n";
为了测试这一点,我在同一个 PHP 脚本中执行以下操作:
$decoded_refresh_token = base64_decode($encrypted_encoded_token);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $ENCRYPTION_SECRET, $decoded_refresh_token, MCRYPT_MODE_ECB);
echo "\nDecrypted Token After decrypt: " . $decrypted . "\n";
我的输入 $refresh_token 是一长串字符,看起来像这样(只是更长):
AQCNKTZhaWTmUl3WvHOtlkv2Vc-Ybkl24D5Zp1lZPLBraTxrr-YQhErXrI2IWWEIWk5lnBc1k
解密后的解密令牌如下所示:
AQCNKTZhaWTmUl3WvHOtlkv2Vc-Ybkl24D5Zp1lZPLBraTxrr-YQhErXrI2IWWEIWk5lnBc1k�������������������
我的 $ENCRYPTION_SECRET 长度为 32 个字符。 base64_encode和decode是因为我是json_encoding和解码post中的token。
我做错了什么?
【问题讨论】:
-
你看过那些额外的字符是什么吗?例如如果它们是空值,那么它们可能是加密添加的填充字符,以使字符串达到加密算法要求的任何块大小。
-
@MarcB 抱歉,我怎么知道这些字符是什么?
-
使用
ord(substr($decrypted, 32, 1))或任何偏移量。看看 char 的值是多少。
标签: php encryption mcrypt