Đó là sự kết hợp của hai hàm băm MD5.
Nó bắt nguồn như thế này:
128bit_Key = MD5(Passphrase + Salt)
256bit_Key = 128bit_Key + MD5(128bit_Key + Passphrase + Salt)
Bạn có thể kiểm tra điều này bằng cách thực hiện:
$ echo Testing > file
$ openssl enc -aes-256-cbc -p -in file -out file.aes -salt
: enter aes-256-cbc encryption password: abc
: Verifying - enter aes-256-cbc encryption password: abc
: salt=3025373CA0530C93
: key=E165475C6D8B9DD0B696EE2A37D7176DFDF4D7B510406648E70BAE8E80493E5E
: iv =B030394C16C76C7A94DC22FDDB6B0744
$ perl -e 'print pack "H*", "3025373CA0530C93"' > salt
$ echo -n abc > passphrase
$ cat passphrase > key.128.tmp
$ cat salt >> key.128.tmp
$ md5sum key.128.tmp
: e165475c6d8b9dd0b696ee2a37d7176d key.128.tmp
$ perl -e 'print pack "H*", "e165475c6d8b9dd0b696ee2a37d7176d"' > key.128
$ cat key.128 > key.256.tmp
$ cat passphrase >> key.256.tmp
$ cat salt >> key.256.tmp
$ md5sum key.256.tmp
: fdf4d7b510406648e70bae8e80493e5e key.256.tmp
Lưu ý rằng cả MD5 của 'key.128.tmp' và 'key.256.tmp' được ghép với nhau tạo thành cùng một khóa như đầu ra tại lệnh ban đầu.
md5
thay vìsha1
, tôi nhận được kết quả giống như tôi đã đăng ban đầu. Câu hỏi là, làm thế nào để nó có được 256 bit từ MD5 (thuật toán băm 128 bit)?