这两个代码单独工作,但即使它们依赖于相同的库,也不会产生相同的结果
他们俩:
- 读取名为Plavext.txt的文件的内容
- 从提供的键创建一个32字节的哈希
- 从提供的初始化向量创建16字节哈希
- 使用AES-256-CBC对内容进行加密
- 将以Base64编码的加密内容写入名为cipherext.base 64的文件中
PHP
<?php
$encrypt_method = "AES-256-CBC";
$secret_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$secret_iv = 'YYYYYYYYY';
// hashes
$key = substr(hash('sha256', $secret_key), 0, 32);
$iv = substr(hash('sha256', $secret_iv), 0, 16);
$string = file_get_contents('plaintext.txt');
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
//By default the output is already in base64
file_put_contents('ciphertext.base64', $output);
?>
巴什
key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
secret_iv='YYYYYYYYY'
keyhash=$(echo -n $key | sha256sum | cut -c 1-32)
ivhash=$(echo -n $secret_iv | sha256sum | cut -c 1-16)
openssl enc -aes-256-cbc -e -K "$keyhash" -iv "$ivhash" -in plaintext.txt -out ciphertext.base64 -base64
我真的不明白为什么结果会不一样.此外,在php中,IV的长度必须为16,而shell 程序报告的长度应该是32
有什么建议吗?
在bash中,我注意到32个0被添加到key(64个字符),16个0被添加到IV(32个字符),这可能是警告"十六进制字符串太短,用零字节填充长度"的结果.