cms decrypt iv

1. 数字信封解封时使用数字信封中的 IV
2. 数字信封解封格式错误时抛出异常 IllegalArgumentException("数字信封解封格式错误")
This commit is contained in:
cheney
2022-06-22 17:37:13 +08:00
parent 6bd2cf1197
commit 8e3e0c5f11
2 changed files with 54 additions and 4 deletions
+18 -4
View File
@@ -2617,6 +2617,11 @@ public class SydApi4j implements SydApi {
// 密文段
ASN1Sequence seq5 = (ASN1Sequence) seq.getObjectAt( 2 ).toASN1Primitive();
ASN1Sequence seq6 = (ASN1Sequence) seq5.getObjectAt(1).toASN1Primitive();
DEROctetString iv = (DEROctetString) seq6.getObjectAt(1).toASN1Primitive();
ret.put("iv", iv.getOctets() );
ASN1TaggedObject tag = (ASN1TaggedObject) seq5.getObjectAt(2).toASN1Primitive();
DEROctetString data = (DEROctetString) tag.getObject();
ret.put("enData", data.getOctets() );
@@ -2679,17 +2684,26 @@ public class SydApi4j implements SydApi {
e.printStackTrace();
}
RetWrap ret = deCMSEnvelopedData( Util.decodeBase64( pCipherKey ) );
RetWrap ret = null;
try {
ret = deCMSEnvelopedData( Util.decodeBase64( pCipherKey ) );
} catch ( Exception e) {
throw new IllegalArgumentException("数字信封解封格式错误");
}
byte[] sessionKeyDer = (byte[]) ret.get("sessionKeyDer");
byte[] enData = (byte[]) ret.get("enData");
// 解密原文
byte[] iv = (byte[]) ret.get("iv"); //new byte[32];
// Arrays.fill(iv, (byte) 0x30);
iv = Util.bytes2HexString( iv ).getBytes();
// 解密会话密钥
ret = decryptDE(false, 1, dnBytes, Util.encodeBase64(sessionKeyDer) );
String sessionKey = new String((byte[]) ret.get("SessionKey") );
// 解密原文
byte[] iv = new byte[32];
Arrays.fill(iv, (byte) 0x30);
RetWrap retWrap = SYMEnDeData(false, 1, sessionKey, 1, 1, enData, iv, 0);
byte[] data = (byte[]) retWrap.get("msg_all");