Des
OpenSSL des-ede3 不產生與測試向量相同的輸出意味著它應該是
我正在使用 openssl 加密標準 TDEA/3DES/DES-EDE 測試向量之一:
<?php $key = pack('H*', '0123456789ABCDEF' . '23456789ABCDEF01' . '456789ABCDEF0123'); $result = openssl_encrypt('The quick brown fox jump', 'des-ede3', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING); echo chunk_split(bin2hex($result), 16, ' ');
(des-ede3是ecb模式)
這給出
1ccf23869d09333e cce21c8112256fe6 68d5c05dd9b6b900
了結果。但是NIST SP 800-67 附錄 B.1中 ECB 模式下 TDEA 的測試向量表明輸出應該是
A826FD8CE53B855F CCE21C8112256FE6 68D5C05DD9B6B900
。那麼這是什麼一回事?
看起來測試向量中有錯誤。
附錄 B.1 的文字說明:
P1 =“狡辯”= 5468652071756663
…這是不正確的。
的十六進制編碼
The quic
實際上是5468652071756963
(注意編碼中i
/69
到f
/的轉置66
。例如,按預期加密測試向量:
$ echo -n 'The quick brown fox jump' | openssl des-ede3 -nosalt -nopad -K '0123456789ABCDEF23456789ABCDEF01456789ABCDEF0123' | xxd -c 8 -ps 1ccf23869d09333e cce21c8112256fe6 68d5c05dd9b6b900
…並將測試向量加密為十六進制編碼:
$ echo -n 'The qufck brown fox jump' | openssl des-ede3 -nosalt -nopad -K '0123456789ABCDEF23456789ABCDEF01456789ABCDEF0123' | xxd -c 8 -ps a826fd8ce53b855f cce21c8112256fe6 68d5c05dd9b6b900
自 2004 年版本 1以來,此錯誤似乎一直存在於 NIST SP 800-67中。