添加78指令所对应的sm2加解密接口SYD_SM2_Encrypt和SYD_SM2_Decrypt,返回的加密后的数据为der编码的数据
This commit is contained in:
parent
2a8436afca
commit
85edd173ae
Binary file not shown.
@ -94,6 +94,15 @@ interface SydASYMApi {
|
||||
byte[] pOrgData
|
||||
);
|
||||
|
||||
/**
|
||||
* 用指定的 SM2 公钥对指定的密文数据进行加密。
|
||||
*
|
||||
* @param publicKey 公钥钥串,DER 编码,HEX 格式。
|
||||
* @param pOrgData 加密的数据。
|
||||
* @return 加密的数据 der 编码。
|
||||
*/
|
||||
byte[] SYD_SM2_Encrypt(byte[] publicKey, byte[] pOrgData);
|
||||
|
||||
|
||||
/**
|
||||
* 用指定的 SM2 公钥对指定的密文数据进行加密。
|
||||
@ -117,11 +126,19 @@ interface SydASYMApi {
|
||||
/**
|
||||
* 使用外部私钥解密
|
||||
* @param sk LMK下加密的私钥
|
||||
* @param enData 密文数据(DER 编码)
|
||||
* @return 公钥加密的密文的 DER 编码(对于 RSA 算法,数据类型为 BIT)
|
||||
* @param enData 密文数据(base64 编码)
|
||||
* @return 解密结果
|
||||
*/
|
||||
byte[] SM2Decrypt(byte[] sk, String enData);
|
||||
|
||||
/**
|
||||
* 使用外部私钥解密
|
||||
* @param sk LMK下加密的私钥
|
||||
* @param enData 密文数据(DER 编码)
|
||||
* @return 解密结果
|
||||
*/
|
||||
byte[] SYD_SM2_Decrypt(byte[] sk, byte[] enData);
|
||||
|
||||
/**
|
||||
* 通过使用者 ID 所对应的私钥对指定的密文数据进行解密。
|
||||
* 输入的sm2密文结构为C1C2C3格式
|
||||
|
||||
@ -128,8 +128,8 @@ interface SydAttachedSVApi {
|
||||
|
||||
/**
|
||||
* 采用 SM2 算法,用指定的公钥对指定的原始数据进行数字签名验证。
|
||||
* @param certNo 哈希标识 指示用于哈希证书数据的哈希算法的标识。0: SHA1 1: SHA256 2: MD5
|
||||
* @param nOrgDataType 签名方式
|
||||
* @param certNo id 用于计算SM3-HASH
|
||||
* @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据,用1.2.3章节限定符亦可
|
||||
* @param publicKey 公钥
|
||||
* @param orgData 原始数据
|
||||
* @param sign base64 格式的签名
|
||||
|
||||
@ -4065,6 +4065,41 @@ public class SydApi4j implements SydApi {
|
||||
return SYMUtil.derEnData2Base64EnData(((PacketSection) ret.get("cipherData")).getBytes());
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM2_Encrypt(byte[] publicKey, byte[] pOrgData) {
|
||||
Proto77 proto = new Proto77();
|
||||
|
||||
// 填充数据
|
||||
HashMap<String, Object> packet = new HashMap<String, Object>();
|
||||
HashMap<String, Object> data = new HashMap<String, Object>();
|
||||
packet.put("data", data);
|
||||
PacketSN sn = PacketSN.gen();
|
||||
packet.put("header", sn.getSn().array());
|
||||
data.put("AlgorithmKey$option", 1);
|
||||
data.put("publicKey", publicKey);
|
||||
data.put("infoData", pOrgData);
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
//ProtocolParser parser = pset.getProtocolResParse();
|
||||
Packet p = proto.parse(bb);
|
||||
Map<String, Object> ret = p.toMap();
|
||||
if (
|
||||
!Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())
|
||||
) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
ret = (Map<String, Object>) ret.get("data");
|
||||
PacketSection error = (PacketSection) ret.get("error");
|
||||
if (!"00".equals(error.getString())) {
|
||||
throw new SydApiException(error.getInfo(), error.autoInt());
|
||||
}
|
||||
|
||||
return ((PacketSection) ret.get("cipherData")).getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] SM2Decrypt(byte[] sk, String enData) {
|
||||
@ -4106,6 +4141,43 @@ public class SydApi4j implements SydApi {
|
||||
return ((PacketSection) ret.get("data")).getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM2_Decrypt(byte[] sk, byte[] enData) {
|
||||
Proto78 proto = new Proto78();
|
||||
|
||||
// 填充数据
|
||||
HashMap<String, Object> packet = new HashMap<String, Object>();
|
||||
HashMap<String, Object> data = new HashMap<String, Object>();
|
||||
packet.put("data", data);
|
||||
PacketSN sn = PacketSN.gen();
|
||||
packet.put("header", sn.getSn().array());
|
||||
data.put("AlgorithmKey$option", 1);
|
||||
data.put("infoData", enData);
|
||||
data.put("privateKeyTag", "999999999999999999999999999");
|
||||
data.put("privateKey", sk);
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
//ProtocolParser parser = pset.getProtocolResParse();
|
||||
Packet p = proto.parse(bb);
|
||||
Map<String, Object> ret = p.toMap();
|
||||
if (
|
||||
!Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())
|
||||
) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
ret = (Map<String, Object>) ret.get("data");
|
||||
PacketSection error = (PacketSection) ret.get("error");
|
||||
if (!"00".equals(error.getString())) {
|
||||
throw new SydApiException(error.getInfo(), error.autoInt());
|
||||
}
|
||||
|
||||
return ((PacketSection) ret.get("data")).getBytes();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public byte[] SM2DecryptC(String userId, String enData) {
|
||||
@ -5600,7 +5672,7 @@ public class SydApi4j implements SydApi {
|
||||
/**
|
||||
* 8.1生成一个MAC(=)
|
||||
*
|
||||
* @param TAK
|
||||
* @param TAK tak类型的密钥
|
||||
* @param infoData MAC数据,数据长度应该为8的整数倍,如果不是8的整数倍,系统默认在数据后面填充0x00组成8的整数倍。
|
||||
* @param IV IV
|
||||
* @return 所计算出的MAC hex 格式
|
||||
|
||||
@ -2,6 +2,7 @@ package com.sunyard.sydapi.test;
|
||||
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.SydApi;
|
||||
import com.sunyard.SydApiException;
|
||||
import com.sunyard.cert.X509;
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.util.CoderUtil;
|
||||
@ -12,6 +13,11 @@ import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
|
||||
import static com.sunyard.sydapi.util.PrintUtil.printByteArray;
|
||||
@ -30,7 +36,8 @@ public class TestAllMethods {
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.99", 8889, null, 1000);
|
||||
@ -161,6 +168,66 @@ public class TestAllMethods {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自己发送及接收
|
||||
* @throws IOException
|
||||
*/
|
||||
@Test
|
||||
public void testSendData() throws IOException {
|
||||
String msg = "000D00000000000000005938303136";
|
||||
|
||||
String ip = "172.16.18.59";
|
||||
int port = 8889;
|
||||
int timeout = 1000;
|
||||
|
||||
// 连接socket
|
||||
Socket socket = new Socket();
|
||||
SocketAddress address = new InetSocketAddress(ip, port);
|
||||
|
||||
try {
|
||||
socket.connect(address, timeout);
|
||||
socket.setSoTimeout(timeout);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
InputStream is = null;
|
||||
try {
|
||||
// 发送数据
|
||||
socket.getOutputStream().write(Util.hexString2Bytes(msg));
|
||||
// 接收数据
|
||||
is = socket.getInputStream();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// 处理数据
|
||||
int d;
|
||||
int high = is.read();
|
||||
int low = is.read();
|
||||
// 计算数据总长度
|
||||
int len = (high << 8) + low;
|
||||
|
||||
len += 2;
|
||||
|
||||
// 创建ByteBuffer
|
||||
ByteBuffer bb = ByteBuffer.allocate(len);
|
||||
bb.put((byte) (high & 0xFF));
|
||||
|
||||
bb.put((byte) (low & 0xFF));
|
||||
|
||||
// 将数据放入ByteBuffer中
|
||||
while ((d = is.read()) != -1) {
|
||||
|
||||
bb.put((byte) (d & 0xFF));
|
||||
if (bb.position() == len) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("返回的hex: " + Util.bytes2HexString(bb.array()));
|
||||
}
|
||||
|
||||
|
||||
// A0 1.1.1 对称密钥产生,
|
||||
// 测试通过
|
||||
@ -670,7 +737,7 @@ public class TestAllMethods {
|
||||
@Test
|
||||
public void testSM4EncryptFileDataCBC() {
|
||||
String key = "X6CEE744329499B426CEE744329499B42";
|
||||
String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in1.txt";
|
||||
String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in.txt";
|
||||
String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
|
||||
boolean b = api.SM4EncryptFileDataCBC(0, key, 0, 0, inFilePath, outFilePath);
|
||||
System.out.println(b);
|
||||
@ -1259,7 +1326,8 @@ public class TestAllMethods {
|
||||
// 6B
|
||||
@Test
|
||||
public void testDecryptDE2() {
|
||||
String sn = "1004282452";
|
||||
// String sn = "1004282452";
|
||||
String sn = "1FD9F2049860FD072F0CC71B072EBF9952E2784E";
|
||||
RetWrap retWrap = api.generateDE(sn, SydApi.ALG_SM4);
|
||||
String CipherKey = (String) retWrap.get("CipherKey");
|
||||
printRetWrap(retWrap);
|
||||
@ -1270,6 +1338,7 @@ public class TestAllMethods {
|
||||
printRetWrap(retWrap1);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDecryptDE3() {
|
||||
String sn = "1004282452";
|
||||
@ -1311,6 +1380,9 @@ public class TestAllMethods {
|
||||
String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
|
||||
printRetWrap(retWrap);
|
||||
|
||||
byte[] decode = Base64.getDecoder().decode(CipherKey);
|
||||
System.out.println("解base64: " + Util.bytes2HexString(decode));
|
||||
|
||||
RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
|
||||
printRetWrap(retWrap1);
|
||||
}
|
||||
@ -1527,7 +1599,7 @@ public class TestAllMethods {
|
||||
"-----END CERTIFICATE-----";
|
||||
|
||||
String jgh = "00000000";
|
||||
System.out.println(api.importCert(Util.getSafeBytes(cert), jgh.getBytes()));
|
||||
System.out.println(api.importCert(Util.getSafeBytes(cert), null));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1659,6 +1731,36 @@ public class TestAllMethods {
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testaaba() throws UnsupportedEncodingException {
|
||||
String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
|
||||
String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
|
||||
String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
|
||||
|
||||
System.out.println("解密: " + Util.bytes2HexString(Base64.getDecoder().decode(sign)));
|
||||
|
||||
boolean b = api.SM2Verify( Util .hexString2Bytes(pk), orgData.getBytes("gbk"), sign);
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
|
||||
// 75
|
||||
@Test
|
||||
public void testaabac() throws UnsupportedEncodingException {
|
||||
String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
|
||||
|
||||
String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
|
||||
String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
|
||||
|
||||
// 这里,不管是签名还是验签,都需要在外部做一次hash。
|
||||
byte[] hash = api.SM3Hash(pk, orgData.getBytes("gbk"));
|
||||
|
||||
System.out.println("hash: " + Util.bytes2HexString(hash));
|
||||
|
||||
boolean b = api.SM2Verify(SydApi.DATA_HASH, Util.hexString2Bytes(pk), hash, sign);
|
||||
System.out.println("验签结果: " + b);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 75
|
||||
@Test
|
||||
@ -1669,6 +1771,7 @@ public class TestAllMethods {
|
||||
|
||||
String s = api.SM2SignC(1, "111111111111115100100000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
|
||||
|
||||
// gVIu3Ng+/pysU8uwRKBgouhqqA5fA9Qtr6OpgL3KD8+M+m4XzKQcAydr+87XFeGzxiow0CEagbcffRgEtewR9w==
|
||||
System.out.println(s);
|
||||
System.out.println("DecBase64:" + Util.bytes2HexString(Base64.getDecoder().decode(s)));
|
||||
boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
|
||||
@ -1729,6 +1832,7 @@ public class TestAllMethods {
|
||||
String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
|
||||
System.out.println("加密后的数据: " + s);
|
||||
System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
|
||||
byte[] pOrgData = SYMUtil.base64EnData2DerEnData(s);
|
||||
System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
|
||||
|
||||
@ -1737,16 +1841,35 @@ public class TestAllMethods {
|
||||
System.out.println("decData:" + new String(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 78
|
||||
@Test
|
||||
public void testSYD_SM2_Encrypt() {
|
||||
|
||||
String sk="00010000C5AA43F372B01220C25406046EECBDAFEBD2206A6E4C8401DB6C54FE35DD4D520000000000000000000000000000000000000000000000000000000000000000";
|
||||
String publicKey = "03420004C0D1A2FB87B51F22D490EA88301EB210BD6C9A6C21DA4D4BFF1ED2E70622909F58A6A3A55308D1CE46CF9A58090E6BA3BC34A6625D1765D87F9A0557CCFBC244";
|
||||
String orgData = "FFFFFFFFFFF1111111111FFFFF";
|
||||
|
||||
byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
|
||||
|
||||
byte[] bytes = api.SYD_SM2_Decrypt(Util.hexString2Bytes(sk), encData);
|
||||
System.out.println("decData:" + new String(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 78
|
||||
@Test
|
||||
public void testSM2DecryptOrder() {
|
||||
String certId = "1111111111111151";
|
||||
String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
|
||||
String orgData = "FfffffffffffffFfffffffffffffffff";
|
||||
String orgData = "FFFFFFFFFFF1111111111FFFFF";
|
||||
String s = api.SM2EncryptOrder(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
|
||||
System.out.println("加密后的数据: " + s);
|
||||
System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
|
||||
byte[] pOrgData = SYMUtil.base64EnData2DerEnDataC1C2C3(s);
|
||||
System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
|
||||
|
||||
byte[] bytes = api.SM2DecryptOrder(certId, s, SydApi.FOR_ENCRYPT);
|
||||
|
||||
@ -1764,9 +1887,11 @@ public class TestAllMethods {
|
||||
// E0
|
||||
@Test
|
||||
public void testSYMEncryptData() {
|
||||
String sm4Key = "XF356BCBA3204F6E6F356BCBA3204F6E6";
|
||||
|
||||
byte[] bytes = api.SYMEncryptData(SydApi.NALG_SM4,"XF356BCBA3204F6E6F356BCBA3204F6E6", "1111111111111111".getBytes());
|
||||
byte[] bytes1 = api.SYMDecryptData(3, "XF356BCBA3204F6E6F356BCBA3204F6E6", bytes);
|
||||
byte[] bytes = api.SYMEncryptData(SydApi.NALG_SM4,sm4Key, "1111111111111111".getBytes());
|
||||
System.out.println("密文:" + Util.bytes2HexString(bytes));
|
||||
byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sm4Key, bytes);
|
||||
System.out.println(new String(bytes1));
|
||||
}
|
||||
|
||||
@ -1864,6 +1989,8 @@ public class TestAllMethods {
|
||||
"CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
|
||||
"qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
|
||||
|
||||
|
||||
|
||||
X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), sign);
|
||||
System.out.println(Util.bytes2HexString(x509.getPubKey()));
|
||||
}
|
||||
@ -1887,10 +2014,49 @@ public class TestAllMethods {
|
||||
"uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
|
||||
"CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
|
||||
"qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
|
||||
String s = CoderUtil.certAddHT(pCert1);
|
||||
|
||||
String pCert2 = "MIIDATCCAqWgAwIBAgIUKGNCcRdvF5KJOxRb401NHRTCSogwDAYIKoEcz1UBg3UFADCBjTFHMEUGA1UEAww+U2hlbiBaaGVuIGlUcnVzQ2hpbmEgQ2xhc3MgRW50ZXJwcmlzZSBTdWJzY3JpYmVyIENBIFNNMiAtIFRlc3QxGDAWBgNVBAsMD+a1i+ivlemDqOivleeUqDEbMBkGA1UECgwS5aSp6K+a5a6J5L+h6K+V55SoMQswCQYDVQQGEwJDTjAeFw0yMjAyMTUwMzA1MzVaFw0yMzAyMTUwMzA1MzVaMIGNMTAwLgYDVQQGDCfkv6Hpm4Xovr7ns7vnu5/lt6XnqIvogqHku73mnInpmZDlhazlj7gxMDAuBgNVBAoMJ+S/oembhei+vuezu+e7n+W3peeoi+iCoeS7veaciemZkOWFrOWPuDEVMBMGA1UECwwM5rWL6K+V6YOo6ZeoMRAwDgYDVQQDDAdzdW55YXJkMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEcKKvHjHE9Y2exfJfYZOeWffq2A5k6RRUbBhMsjCKK3eciz1WkDGIdjAgW/VI++MMITimKMXq0bwnnmo2PTNvfqOB3jCB2zAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFIDBqBgNVHR8EYzBhMF+gXaBbhllodHRwOi8vc3p0b3BjYS5zeml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9NzMzNUExQUYzNzRBMUU4QjQwM0FCMUFDMkQwNjVDQUU3NUNBQjIzNjAfBgNVHSMEGDAWgBQrRjpP0Z4sztQfhsLWPZq/Jyhk9zAdBgNVHQ4EFgQUG6xZRL5VQ+DonJX4crqkUphJIA4wFQYHYIEcAQYKAgQKDAhJVFJVU0tNQzAMBggqgRzPVQGDdQUAA0gAMEUCIQCdLHm9pjihzyR9A5uXrTo4UC+Rpcm5vPGh4Do58bqRKgIgLpryVWqLVb8GqL91KdmXd7E7RrG7DjqiworD9TEmnLY=";
|
||||
String s = CoderUtil.certAddHT(pCert2);
|
||||
System.out.println(s);
|
||||
X509 x509 = api.GetX509CertInfo(s);
|
||||
System.out.println(x509);
|
||||
System.out.println("公钥" + Util.bytes2HexString(x509.getPubKey()));
|
||||
System.out.println("sn:" + x509.getSerialNumber());
|
||||
System.out.println("dn:" + x509.getSubject());
|
||||
System.out.println("getCert:" + x509.getCert());
|
||||
System.out.println("getIssuer:" + x509.getIssuer());
|
||||
System.out.println("getNotAfter:" + x509.getNotAfter());
|
||||
System.out.println("getNotBefore:" + x509.getNotBefore());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetX509CertInfo2() {
|
||||
|
||||
String pCert = "-----BEGIN CERTIFICATE-----\\r\\nMIIC0DCCAnSgAwIBAgIFEEBzAUEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJD\\r\\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\\r\\naXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjAxMTAzMDk1NTU4\\r\\nWhcNMjUxMTAzMDk1NTU4WjB1MQswCQYDVQQGEwJDTjEQMA4GA1UECgwHT0NBMVNN\\r\\nMjENMAsGA1UECwwEdGVzdDEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjEqMCgG\\r\\nA1UEAwwhMDUxQGNoaW5hdW5pb25wYXlAWjkwNTI5MDAwMDAwOEAyMFkwEwYHKoZI\\r\\nzj0CAQYIKoEcz1UBgi0DQgAEkw27RvY8mAx6h7vnSW/+X3b++a1E6LzQTPWMOiKP\\r\\nAfZTqJMKeRnQNEKt+N7EA98YHVheOCT9TlZ3fkgtNZcH86OCAQYwggECMB8GA1Ud\\r\\nIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMAwGA1UdEwEB/wQCMAAwSAYDVR0g\\r\\nBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2Eu\\r\\nY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNy\\r\\nbC5jZmNhLmNvbS5jbi9TTTIvY3JsMTM3MzYuY3JsMA4GA1UdDwEB/wQEAwIGwDAd\\r\\nBgNVHQ4EFgQUn9wz++O90r2Bc7qlzqeIhIVivD4wHQYDVR0lBBYwFAYIKwYBBQUH\\r\\nAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgNXTJts3vqvCbbhUKwnkI\\r\\nrv+HeDeyTwU4JJpBTWCR6TACIQCtQShpYt9jgxw6VSHpKEXnnWH9u4vYhXDoH42w\\r\\nWVaX6A==\\r\\n-----END CERTIFICATE-----";
|
||||
|
||||
String pCert2 = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIDUjCCAjoCCQDEXN6JVLqjQzANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJj\n" +
|
||||
"bjELMAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNV\n" +
|
||||
"BAsMBGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20w\n" +
|
||||
"HhcNMjExMTE5MDc1NDM1WhcNMjExMjE5MDc1NDM1WjBrMQswCQYDVQQGEwJjbjEL\n" +
|
||||
"MAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNVBAsM\n" +
|
||||
"BGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20wggEi\n" +
|
||||
"MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrOL1rh39AzMJYD6bPmumW0aUi\n" +
|
||||
"JW1U9SgGYF4FBFoN7DnfgSe9dDg6FIiT81kfqz+ydeACsFCkfdjXhsrI/SEvtkK6\n" +
|
||||
"/Y3PMzMys01xKFoZywaOf4s9jSQXhDQxs82HgPkHAVGmIOdIzGV0MGaPyGKaUyLQ\n" +
|
||||
"s3bYBO656rLFEuNGM6Hr0r6PtEEBvBoveK3CcYVZL9KzeOEQAXJlYMD1T7xetgZu\n" +
|
||||
"obl/cbC2fmNA4xRqNA+qxherzF91zC2G0WMYdPubGkAaXFfiVUwuazCpQ60AECIy\n" +
|
||||
"sYnR2m8+hbCEujTYrd2Na+a0e4T/HSzsN5lZ5dl8UMJ7pMsc/hH176fy+39LAgMB\n" +
|
||||
"AAEwDQYJKoZIhvcNAQELBQADggEBACNyTOW6Glb6/jWBLJRmob09b/DA0xGSyRAM\n" +
|
||||
"Qwij6ch1GInO3LKfkIiuty8EGHADRraZk6igUAthAMPInPy6P+CNvGx5U3qRk0nT\n" +
|
||||
"hChQ23AkkBpzvr+7LmLFid3mmgnGwPUBJtor6ylCZbG2lIpUBrWQhHqRqWYiv3N1\n" +
|
||||
"nnOQRe1pWdk/Jw3m7mlXO1xKb0XeFQ8bLZG15b6qgkWeyTnGju5+NPMNV3U3w9WE\n" +
|
||||
"tHW9v9xxFj/++3+U0pMaYwhKz8PA7qVfiPiEIsU1SAiQRPwUUODZG+YYAz2lSOHS\n" +
|
||||
"TN36nYmVbVuWMguNPKKXY2b2mosnU6t0xtXWHxMhVCF4Slity9s=\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
|
||||
X509 x509 = api.GetX509CertInfo(pCert2);
|
||||
System.out.println(Util.bytes2HexString(x509.getPubKey()));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
|
||||
Loading…
Reference in New Issue
Block a user