我需要在一對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的值是什麼。 –