我需要 Crypto-JS 对 8 字节块执行 DES 加密(目前)。但是,我在没有填充的情况下在 crypto-js 中实现这一点时遇到了问题。
当我执行:
var skl = CryptoJS.DES.encrypt ( CryptoJS.enc.Hex.parse ( "0000000000000000" ), CryptoJS.enc.Hex.parse ( "0000000000000000"),
{ iv : CryptoJS.enc.Hex.parse ( "0000000000000000" ), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.NoPadding } );
我没有输出。CBC 模式不需要填充,但我尝试了所有其他块模式(OFB / CFB 等),仍然没有输出。当我使用 Pkcs7 时,它确实提供了一个输出,但它填充了输入块,从而产生了 16 个字节的密码消息。我猜当您指定填充时,即使块大小兼容,它也总是填充?
var skl = CryptoJS.DES.encrypt ( CryptoJS.enc.Hex.parse ( "0000000000000000" ), CryptoJS.enc.Hex.parse ( "0000000000000000"),
{ iv : CryptoJS.enc.Hex.parse ( "0000000000000000" ), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } );
我是否以正确的方式(通过十六进制解析)指定输入数据?我加密固定大小的原始字节很重要,似乎没有任何例子。
DES加密数据而不填充的正确方法是什么?