我必须传递一个值并将其加密到以下规范:
“256位密钥长度,256位块长度,32字节块,ECB模式,带 ASCII编码(加密数据应以字符串形式提供 将每个字符转换为2字节的HEX值)“
但是我必须遗漏一些东西。这是出于网络服务的验证目的,但由于解密失败,我一直被拒绝。
这就是我所拥有的:
$key = '1324mykey';
$string = 'Ron Swanson';
// 1. Encrypt the string with the key using Rijndael 256 in ECB mode
$td = mcrypt_module_open('rijndael-256', '','ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_string = mcrypt_generic($td, $string);
// 2. Base64 encode my string
$encrypted_string = base64_encode($encrypted_string);
// 3. Convert each character of encrypted_string to it's 2-byte HEX value
$hex='';
for ($i=0; $i < strlen($encrypted_string); $i++)
{
$hex .= dechex(ord($encrypted_string[$i]));
}
// Now $encrypted_string should match up with the recipe, but it isn't.
$encrypted_string = $hex;
我希望加密要求中有一些基本的东西,我在我的过程的第一步中缺少。
答案 0 :(得分:2)
如果您的要求是256位密钥,那么$key
变量不应该是32个字节吗? (换句话说,长度为32个字符)?
答案 1 :(得分:1)
这已经解决了......(un?)幸运的是我只是给了一个错误的参数。