现有加密算法:
对称算法:DES / 3DES / SM4 / AES / SSF33 / RCX
非对称算法: RSA / SM2 / ECC / DSA / DH
信息摘要算法: SHA1 / SM3 / MD4 / MD5 / SHA256
目前银联规范银行卡中使用的安全加密算法分为两种:国际算法和国密算法
替换规则为:RSA <-> SM2, SHA - 1 <-> SM 3 , 3DES <-> SM4
简单总结几种算法的原理如下:
哈希SHA1: 由input生成20字节哈希值,不需要密钥,算法伪代码链接:
奇 / 偶校验:每个字节第8位的值(0/1)需要保证整个字节1的个数为奇 / 偶数
DES:8字节(64bits)明文输入,密钥为8字节(64bits,参与密钥扩展的有效位数56bits),输入不足8字节,补位0x80...0
流程图:
实现代码:
3DES:两种密钥类型(16bytes / 24bytes)
16bytes: KeyA || KeyB , 加密过程中,KeyA用于加密、KeyB用于解密
24bytes: KeyA || KeyB || KeyC , 加密过程中,KeyA KeyB用于加密,KeyB解密
DES0( K , M )表示用K对M进行DES加密,DES1( K , M )表示用K对M进行DES解密
3DES的8字节输入M计算方法:
S = 3DES0( KeyA || KeyB , M ) = DES0 ( KeyA, DES1( KeyB, DES0( KeyA , M ) ) ) (16bytes key)
S = 3DES0( KeyA || KeyB || KeyC , M ) = DES0 ( KeyC , DES1( KeyB , DES0( KeyA , M ) ) ) (24bytes key)
伪代码链接如下:
3DES超过8字节输入M的算法分为两种:ECB / CBC
ECB算法: 1.首先将输入数据补位(80...0)使输入数据的字节数为8的倍数
如:0x7834cda82b347e237ec83c 补位后:0x7834cda82b347e237ec83c80000
2.将输入M以8字节为单位拆分为 M0,M1...Mn
3.对于每个Mi进行3des加密: Si = 3DES0( KEY , Mi )
4.将所有Si连接得到最终的密文:S = S1 || S2 || S3 || ... || Sn
CBC算法: 1, 2步同ECB算法1, 2步
3. 将8字节初始向量 iv 与 M0 异或得到M0'
4. 使用KEY对M0'进行3DES加密得到:S0 = 3DES0( KEY , M0' )
5. 将S0 作为下一8字节的初始向量与下一8字节异或得到 M1' = M1 XOR S0
6. 循环 4 , 5步计算得到Si
7. 将所有Si连接得到最终密文: S = S1 || S2 || S3 || ... || Sn
&n