Select OpenSSL 命令中的不同填充模式
Select different padding modes in OpenSSL commands
我写了一个Java卡片小程序来做DES encryption/Decryption。 (如果你想使用它,请考虑 Bodewes 先生在此源代码中发现了一些错误(在他的回答下的评论中提到了这些错误。因此修复它然后使用 ) 具有以下功能:
- DES_ECB_ISO9797_M1
- DES_ECB_ISO9797_M2
- DES_ECB_NOPAD
- DES_ECB_PKCS5
我比较了我的程序输出和在线工具的输出,最后我发现它们不同。所以我想使用 OpenSSL 检查程序输出的正确性。
这些是使用密钥 = 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
加密 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30
的结果:
::> SendToApplet.exe -key 1122334455667788 -data 3030303030303030
Command::
Data: 3030303030303030
Key : 1122334455667788
Results::
DES_ECB_ISO9797_M1:
8E 43 CF B8 91 02 01 38 .C.....8
DES_ECB_ISO9797_M2:
A6 DE 1C D9 1B A9 EE D0 ........
DES_ECB_NOPAD:
0B FC BF EE 82 F4 8B 19 .......
DES_ECB_PKCS5:
AA 6E 4D 79 E5 0C B1 51 .nMy...Q
问题是我如何检查这些结果是否正确?
这是 OpenSSL 工具 命令和参数的列表:
OpenSSL> ?
openssl:Error: '?' is an invalid command.
Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
ec ecparam enc engine errstr
gendh gendsa genrsa nseq ocsp
passwd pkcs12 pkcs7 pkcs8 prime
rand req rsa rsautl s_client
s_server s_time sess_id smime speed
spkac verify version x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160 sha
sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc
aes-256-ecb base64 bf bf-cbc bf-cfb
bf-ecb bf-ofb cast cast-cbc cast5-cbc
cast5-cfb cast5-ecb cast5-ofb des des-cbc
des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea idea-cbc
idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40
不幸的是,我可以看到与填充模式相关的任何内容(即 ISO9797_M1、ISO9797_M2、NOPAD 和 PKCS5)。我如何在我的命令中指定它们?
基于openssl doc:
All the block ciphers normally use PKCS#5 padding also known as standard block padding
这是唯一受支持的填充方案。
解决方法是使用 -nopad
选项和 "manually" 填充您的输入消息,按照您提到的填充方案。
填充发生在使用块密码加密之前。这意味着您始终可以通过解密密文并手动验证填充来进行检查。使用 openssl
您可以简单地使用 -nopad
和 -K <key in hex>
然后验证输出(首先将二进制转换为人类可读格式)。
目前我们无法验证,因为您的小程序没有返回足够的数据;你可能忘记完成加密了。
我写了一个Java卡片小程序来做DES encryption/Decryption。
- DES_ECB_ISO9797_M1
- DES_ECB_ISO9797_M2
- DES_ECB_NOPAD
- DES_ECB_PKCS5
我比较了我的程序输出和在线工具的输出,最后我发现它们不同。所以我想使用 OpenSSL 检查程序输出的正确性。
这些是使用密钥 = 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
加密 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30
的结果:
::> SendToApplet.exe -key 1122334455667788 -data 3030303030303030
Command::
Data: 3030303030303030
Key : 1122334455667788
Results::
DES_ECB_ISO9797_M1:
8E 43 CF B8 91 02 01 38 .C.....8
DES_ECB_ISO9797_M2:
A6 DE 1C D9 1B A9 EE D0 ........
DES_ECB_NOPAD:
0B FC BF EE 82 F4 8B 19 .......
DES_ECB_PKCS5:
AA 6E 4D 79 E5 0C B1 51 .nMy...Q
问题是我如何检查这些结果是否正确?
这是 OpenSSL 工具 命令和参数的列表:
OpenSSL> ?
openssl:Error: '?' is an invalid command.
Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
ec ecparam enc engine errstr
gendh gendsa genrsa nseq ocsp
passwd pkcs12 pkcs7 pkcs8 prime
rand req rsa rsautl s_client
s_server s_time sess_id smime speed
spkac verify version x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160 sha
sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc
aes-256-ecb base64 bf bf-cbc bf-cfb
bf-ecb bf-ofb cast cast-cbc cast5-cbc
cast5-cfb cast5-ecb cast5-ofb des des-cbc
des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea idea-cbc
idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40
不幸的是,我可以看到与填充模式相关的任何内容(即 ISO9797_M1、ISO9797_M2、NOPAD 和 PKCS5)。我如何在我的命令中指定它们?
基于openssl doc:
All the block ciphers normally use PKCS#5 padding also known as standard block padding
这是唯一受支持的填充方案。
解决方法是使用 -nopad
选项和 "manually" 填充您的输入消息,按照您提到的填充方案。
填充发生在使用块密码加密之前。这意味着您始终可以通过解密密文并手动验证填充来进行检查。使用 openssl
您可以简单地使用 -nopad
和 -K <key in hex>
然后验证输出(首先将二进制转换为人类可读格式)。
目前我们无法验证,因为您的小程序没有返回足够的数据;你可能忘记完成加密了。