我需要在一对PHP脚本中进行对称加密和解密。我正在使用mcrypt_encrypt和crypt_decrypt。为了验证这一点,我有以下代码:来自mcrypt_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和解码是因为我是json_encoding并在Post中解码令牌。
我在做什么错?
你看过那些额外的字符是什么?例如如果它们是空值,那么它们可能是通过加密添加的填充字符,以使字符串达到crypt算法要求的任何块大小。 –
@MarcB对不起,我怎么知道这些角色是什么? – JeffB6688
使用'ord(substr($ decrypted,32,1))'或任何偏移量。看看char的值是什么。 –