我试图用swift加密一个字符串,然后用php解密它。我得到了一些很好的帮助,希望有人能再次帮助我。
这是我试图在php中用于解密的代码。
$key = "test";
$pass = "bLOKONASw8tE2cki5QhkcA==";
$iv = "1234567890123456";
$base64encoded_ciphertext = $pass;
echo "pass: ".$pass;
$res_non = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($base64encoded_ciphertext), MCRYPT_MODE_CBC, $iv);
$decrypted = $res_non;
echo " 1: ".$decrypted;
$dec_s2 = strlen($decrypted);
echo " 2: ".$dec_s2;
$padding = ord($decrypted[$dec_s2-1]);
echo " padding: ".$padding;
$decrypted = substr($decrypted, 0, -$padding);
echo " Decrypted: ".$decrypted;
字符串是用swift加密的,我在将其发送到服务器之前对其进行base64编码。
我没有得到一个错误,但似乎得到的“解密”值是空的。
我在swift中有一个测试解密函数,它返回正确的输出。
Key:<74657374 73747269 6e67>
Iv:<31323334 35363738 39303132 33343536>
Message: <74657374 6d657373 616765>
ivLength = 16, ivData = <31323334 35363738 39303132 33343536>
encryptedData: <6cb38a38 d012c3cb 44d9c922 e5086470>
base64cryptString = bLOKONASw8tE2cki5QhkcA==
如果有人能帮我找出我错在哪里,那就是美联社
最佳答案
在AES-CBC模式下,初始化向量的长度必须为16字节。