cms decrypt iv
1. 数字信封解封时使用数字信封中的 IV
2. 数字信封解封格式错误时抛出异常 IllegalArgumentException("数字信封解封格式错误")
This commit is contained in:
parent
6bd2cf1197
commit
8e3e0c5f11
@ -2617,6 +2617,11 @@ public class SydApi4j implements SydApi {
|
|||||||
|
|
||||||
// 密文段
|
// 密文段
|
||||||
ASN1Sequence seq5 = (ASN1Sequence) seq.getObjectAt( 2 ).toASN1Primitive();
|
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();
|
ASN1TaggedObject tag = (ASN1TaggedObject) seq5.getObjectAt(2).toASN1Primitive();
|
||||||
DEROctetString data = (DEROctetString) tag.getObject();
|
DEROctetString data = (DEROctetString) tag.getObject();
|
||||||
ret.put("enData", data.getOctets() );
|
ret.put("enData", data.getOctets() );
|
||||||
@ -2679,17 +2684,26 @@ public class SydApi4j implements SydApi {
|
|||||||
e.printStackTrace();
|
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[] sessionKeyDer = (byte[]) ret.get("sessionKeyDer");
|
||||||
byte[] enData = (byte[]) ret.get("enData");
|
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) );
|
ret = decryptDE(false, 1, dnBytes, Util.encodeBase64(sessionKeyDer) );
|
||||||
String sessionKey = new String((byte[]) ret.get("SessionKey") );
|
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);
|
RetWrap retWrap = SYMEnDeData(false, 1, sessionKey, 1, 1, enData, iv, 0);
|
||||||
byte[] data = (byte[]) retWrap.get("msg_all");
|
byte[] data = (byte[]) retWrap.get("msg_all");
|
||||||
|
|
||||||
|
|||||||
@ -5,11 +5,13 @@ import com.sunyard.SydApi;
|
|||||||
import com.sunyard.cert.X509;
|
import com.sunyard.cert.X509;
|
||||||
import com.sunyard.proto.Util;
|
import com.sunyard.proto.Util;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import racal.sunyard.main.SydApi4j;
|
import racal.sunyard.main.SydApi4j;
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -179,6 +181,7 @@ public class TestHT {
|
|||||||
byte[] sign = api.attachedSignC(orgData, dn);
|
byte[] sign = api.attachedSignC(orgData, dn);
|
||||||
System.out.println("签名结果: " + sign);
|
System.out.println("签名结果: " + sign);
|
||||||
|
|
||||||
|
|
||||||
RetWrap verify = api.attachedVerifyAndGetAll(sign);
|
RetWrap verify = api.attachedVerifyAndGetAll(sign);
|
||||||
if (verify != null) {
|
if (verify != null) {
|
||||||
System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
|
System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
|
||||||
@ -186,6 +189,39 @@ public class TestHT {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDecryptDE54k12() throws UnsupportedEncodingException {
|
||||||
|
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||||
|
byte[] oData = new byte[ 4 * 1024 ];
|
||||||
|
|
||||||
|
RetWrap retWrap = api.generateDEByDnHsm(dn, oData);
|
||||||
|
byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
|
||||||
|
byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
|
||||||
|
printRetWrap(retWrap);
|
||||||
|
|
||||||
|
RetWrap retWrap1 = api.decryptDEByDNSoft(dn, new String(CipherKey));
|
||||||
|
printRetWrap(retWrap1);
|
||||||
|
byte[] deData = (byte[]) retWrap1.get("oData");
|
||||||
|
Assert.assertArrayEquals( deData, oData );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDecryptDE54k21() throws UnsupportedEncodingException {
|
||||||
|
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||||
|
byte[] oData = new byte[ 4 * 1024 ];
|
||||||
|
|
||||||
|
RetWrap retWrap = api.generateDEByDnSoft(dn, oData);
|
||||||
|
byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
|
||||||
|
byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
|
||||||
|
printRetWrap(retWrap);
|
||||||
|
|
||||||
|
RetWrap retWrap1 = api.decryptDEByDNHsm(dn, new String(CipherKey));
|
||||||
|
printRetWrap(retWrap1);
|
||||||
|
byte[] deData = (byte[]) retWrap1.get("oData");
|
||||||
|
Assert.assertArrayEquals( deData, oData );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDecryptDE54k() throws UnsupportedEncodingException {
|
public void testDecryptDE54k() throws UnsupportedEncodingException {
|
||||||
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user