修正裸签命令

This commit is contained in:
cheney 2022-05-18 17:15:53 +08:00
parent 05489bfdf7
commit d30f92c991
7 changed files with 47 additions and 144 deletions

View File

@ -37,9 +37,9 @@
待签名数据长度
</dataLength>
<data cn="待签名数据">
<odata cn="待签名数据">
待签名数据
</data>
</odata>
<signatureLen len="2" :value="signLen()" cn="签名的字节长度">
签名的字节长度
@ -127,7 +127,7 @@
</res>
<script><![CDATA[
function dataLen(){
def len = $packet.data.data.length
def len = $packet.data.odata.length
def ret = new byte[2]
ret[0] = (byte)(len >> 8 & 0xFF)
ret[1] = (byte)(len & 0xFF)

View File

@ -58,7 +58,7 @@ const project_path = path.join(__dirname, "../")
const out_path = path.join(project_path, "public")
// 用户文档
const man = "工银亚洲加密机JAVA接口说明文档V1.00.pdf"
const man = "说明.txt"
function prepareDir(){
@ -78,9 +78,9 @@ function prepareDir(){
fs.mkdirSync( path.join( out_path, "jar" ))
fs.mkdirSync( path.join( out_path, "jar", "dependences"))
fs.mkdirSync( path.join( out_path, "doc" ))
fs.mkdirSync( path.join( out_path, "html" ))
//fs.mkdirSync( path.join( out_path, "sample" ))
// fs.mkdirSync( path.join( out_path, "doc" ))
// fs.mkdirSync( path.join( out_path, "html" ))
// fs.mkdirSync( path.join( out_path, "sample" ))
l.i("目录准备完成")
cbok()
@ -145,7 +145,7 @@ function zipjar(){
}
function zipdoc(){
return sync("7z a .\\public\\sydapi-doc-"+ version +".zip .\\public\\doc\\ .\\public\\html\\ .\\src\\test\\java\\com\\sunyard\\sydapi\\sample .\\release.txt").then(function (value, error) {
return sync("7z a .\\public\\sydapi-"+ version +".zip " + man).then(function (value, error) {
l.d( value )
if ( value.indexOf("Everything is Ok") < 0 ){
@ -157,7 +157,7 @@ function zipdoc(){
function dependencies(){
return sync('mvn dependency:copy-dependencies -DoutputDirectory=./public/jar/dependences').then(function (value, error) {
return sync('mvn dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=./public/jar/dependences').then(function (value, error) {
l.d( value )
if ( value.indexOf("BUILD SUCCESS") < 0 ){
@ -229,20 +229,12 @@ async function main() {
}).then(function (value) {
// fs.copyFileSync( path.join(project_path, "docs", man) , path.join(out_path, "doc", man ))
}).then(function (value) {
return doc()
return zipjar()
}).then(function (value) {
return zipdoc()
}).then(function (value) {
return zipjar()
}).then(function () {
l.i("打包完成!")

View File

@ -439,7 +439,7 @@ public class SydApi4j implements SydApi {
packet.put("header", sn.getSn().array());
data.put("signatureDataType$option", 1);
data.put("DN", dn);
data.put("data", orgData);
data.put("odata", orgData);
data.put("signature", sign);
data.put("returnSign$option", 0);
// 渲染发送

View File

@ -1,141 +1,41 @@
package com.sunyard.sydapi.test;
import com.sunyard.SydApi;
import com.sunyard.cert.X509;
import com.sunyard.proto.Util;
import racal.sunyard.main.SydApi4j;
import java.io.UnsupportedEncodingException;
public class TestHAApi {
private static final String testCertNo = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
private static byte[] data = "<MainBody><MsgId><Id>000000000000000201809181000008627</Id><CreDtTm>2018-09-17T19:06:39</CreDtTm></MsgId><CertNtfctnInf><ChngTp>CC00</ChngTp></CertNtfctnInf></MainBody>".getBytes();
public static void main(String[] args) throws UnsupportedEncodingException {
SydApi4j.SYD_Set_Parameter_HA("unkown", "172.16.17.162", 8889 , 1000);
SydApi4j.SYD_Set_Parameter_HA("unkown", "192.168.0.100", 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j();//.connect("wuyong.fullstack.club" , 8889, null,1000);
SydApi4j api = (SydApi4j) new SydApi4j(); //.connect("wuyong.fullstack.club" , 8889, null,1000);
System.out.println("\n\n----- 获取公钥 () -----");
String pk = api.SYD_SM2_Get_Id_PublicKey_HA("1234", 0);
String pk1 = api.SYD_SM2_Get_Dn_PublicKey_HA(testCertNo.getBytes("GBK"), 0);
System.out.print("\r\n公钥 : ");
System.out.println( pk );
System.out.println(pk1);
// 签名验签 2
System.out.println("\n\n----- 签名验签 2 -----");
String sign2 = api.SYD_SM2_DetachedSign_HA(data, testCertNo);
String pk1 = api.SYD_SM2_Get_Dn_PublicKey_HA("C=CN,O=Sunyard,OU=8001,CN=8001".getBytes("GBK"), 0);
System.out.print("\r\n公钥 : ");
System.out.println( pk1 );
//
//
// // 签名
String data="<MainBody><MsgId><Id>101557000040870201809190000000001</Id><CreDtTm>2018-09-19T10:13:39</CreDtTm></MsgId><Qryr><MbrId>101557</MbrId><BrId>000040870</BrId></Qryr><Rspnr><MbrId>201597</MbrId><BrId>000039754</BrId></Rspnr><BizQryInf><QryDt>2018-09-19</QryDt><QryId>00000001</QryId><Cnts>123456测试</Cnts></BizQryInf></MainBody>";
final String testPubKey = "0342000480C7E165DB8CF019509CE359C4FE06535275F5F63ADDC3955721FA4802BDC8701661554096BBC190916F39073C3763C8BEF6ABDF7A042C9F1D12B6BD6E5E2614";
// System.out.println("\n\n----- SM2 算法签名 (原始数据) -----");
// String sign = api.SYD_SM2_Sign_HA(
// "1234",
// SydApi.DATA_ORIGIN,
// Util.hexString2Bytes(testPubKey),
// data.getBytes()
// );
// System.out.print("\n\n----- SM2 算法签名 结果: ");
// System.out.println( sign );
//
//
//
//
//
// System.out.println("\n\n----- SM2 算法验签 (原始数据) -----");
// boolean SM2VerifyRet = api.SYD_SM2_Verify_HA(
// SydApi.DATA_ORIGIN,
// Util.hexString2Bytes(testPubKey), data.getBytes() , sign);
// if (SM2VerifyRet){
// System.out.println("验签通过");
// }else{
// System.err.println("验签失败");
// throw new RuntimeException("验签失败");
// }
// // 签名验签 2
// System.out.println("\n\n----- 签名验签 2 -----");
// String sign2 = api.SYD_SM2_DetachedSign_HA( data.getBytes() , "C=CN,O=Sunyard,OU=8001,CN=8001");
// System.out.println( sign2 );
String sign2 = "MIICpQYKKoEcz1UGAQQCAqCCApUwggKRAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgaAwgZ0CAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAwGCCqBHM9VAYMRBQAwDQYJKoEcz1UBgi0BBQAERzBFAiATwLIYiylt7xHmBkH6EclrchClxzLlKWC5guxxzkr58gIhANSw+owu8cyypdJtHGrGqjSiB1BVzGva+irUHelx/GbC";
sign2 = "MIID7gYKKoEcz1UGAQQCAqCCA94wggPaAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIIC2jCCAtYwggJ6oAMCAQICBUACgAF0MAwGCCqBHM9VAYN1BQAwYTELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEgMB4GA1UEAwwXQ0ZDQSBBQ1MgVEVTVCBTTTIgT0NBMzEwHhcNMTcxMTE2MDY1NDQ1WhcNMjIxMTE2MDY1NDQ1WjCBgzELMAkGA1UEBhMCQ04xHDAaBgNVBAoME0NGQ0EgVEVTVCBTTTIgT0NBMzExDjAMBgNVBAsMBVNIQ1BFMRkwFwYDVQQLDBBPcmdhbml6YXRpb25hbC0xMSswKQYDVQQDDCIwNTFA5LiK5rW356Wo5o2u5Lqk5piT5omAQEFBQUFBQUA4MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYPA9UQRL/ZaThEN0nc3SwkOHw4hPDXG9hZeKiBnNdhgPy1EtX4My2bpNFpYMmQ0nvkJUM4qpJrF7MSqEws6rLaOB+TCB9jA/BggrBgEFBQcBAQQzMDEwLwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwdGVzdC5jZmNhLmNvbS5jbjo4MC9vY3NwMB8GA1UdIwQYMBaAFATHvPlZAWk+jDQ2IGIYPN68tbsMMAwGA1UdEwEB/wQCMAAwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovLzIxMC43NC40Mi4zL09DQTMxL1NNMi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFKJnS7XYRDWG9eqXtSzUZXK+De2/MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0gAMEUCIGaSRoaUSpoH4lW3at1ABluiNwFDH21jHesHmy0F5gjqAiEA0sUykW9E36F3qQ91YDvasQg8EnOMp1idhgt6pq/NUAYxgdgwgdUCAQEwajBhMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQDDBdDRkNBIEFDUyBURVNUIFNNMiBPQ0EzMQIFQAKAAXQwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARHMEUCIQDH3ePzq4nYJ8pAodJyqPKqCQuQwmOpyj/rWcDILzFj2gIgUW5c9W6jD7u91opMcDwaw4aNEvEtGX6ks5XDIMIkUjI=";
// boolean pass = api.SYD_SM2_DetachedVerify_HA( "<MainBody><MsgId><Id>000000000000000201809181000008627</Id><CreDtTm>2018-09-17T19:06:39</CreDtTm></MsgId><CertNtfctnInf><ChngTp>CC00</ChngTp></CertNtfctnInf></MainBody>".getBytes(), sign2 );
// System.out.println( pass );
// // 获取公钥
X509 x = api.SYD_Get_X509_CertInfo_HA( "<MainBody><MsgId><Id>000000000000000201809181000008627</Id><CreDtTm>2018-09-17T19:06:39</CreDtTm></MsgId><CertNtfctnInf><ChngTp>CC00</ChngTp></CertNtfctnInf></MainBody>".getBytes(), sign2 );
System.out.println( Util.bytes2HexString( x.getPubKey() ) );
String sign3 = api.SYD_SM2_Sign_HA(
"1234",
SydApi.DATA_ORIGIN,
x.getPubKey(),
data.getBytes()
);
System.out.print("\n\n----- SM2 算法签名 结果: ");
System.out.println( sign3 );
System.out.println( api.SYD_SM2_Verify_HA(
SydApi.DATA_ORIGIN,
x.getPubKey(),
"<MainBody><MsgId><Id>101557000040870201809190000000001</Id><CreDtTm>2018-09-19T10:13:39</CreDtTm></MsgId><Qryr><MbrId>101557</MbrId><BrId>000040870</BrId></Qryr><Rspnr><MbrId>201597</MbrId><BrId>000039754</BrId></Rspnr><BizQryInf><QryDt>2018-09-19</QryDt><QryId>00000001</QryId><Cnts>123456测试</Cnts></BizQryInf></MainBody>".getBytes() ,
"MEUCIQD59AIVnr01eVm7TQ5zyx6kc1P7OYbVQb50lSL+ydWYcQIgX0/j/Tjim9J8aalnjSK+ljZ60tQ51KDRsuqNUkScZkQ="
) );
boolean pass = api.SYD_SM2_DetachedVerify_HA(data, sign2);
System.out.println("验签=" + pass);
// // 获取公钥
X509 x = api.SYD_Get_X509_CertInfo_HA(data, sign2);
System.out.println("公钥=" + Util.bytes2HexString(x.getPubKey()));
}
}
/*
801201484D61696E426F64793E3C4D736749643E3C49643E3130313535373030303034303837303230313830393139303030303030303030313C2F49643E3C4372654474546D3E323031382D30392D31395431303A31333A33393C2F4372654474546D3E3C2F4D736749643E3C517279723E3C4D627249643E3130313535373C2F4D627249643E3C427249643E3030303034303837303C2F427249643E3C2F517279723E3C5273706E723E3C4D627249643E3230313539373C2F4D627249643E3C427249643E3030303033393735343C2F427249643E3C2F5273706E723E3C42697A517279496E663E3C51727944743E323031382D30392D31393C2F51727944743E3C51727949643E30303030303030313C2F51727949643E3C436E74733E313233343536EFBC8CE6B58BE8AF953C2F436E74733E3C2F42697A517279496E663E3C2F4D61696E426F64793E01557141694541307355796B57394533364633715139315944766173516738456E4F4D703169646867743670712F4E55415978676467776764554341514577616A42684D517377435159445651514745774A44546A45774D433447413155454367776E51326870626D4567526D6C755957356A6157467349454E6C636E52705A6D6C6A59585270623234675158563061473979615852354D534177486759445651514444426444526B4E42494546445579425552564E5549464E4E4D6942505130457A4D51494651414B4141585177444159494B6F45637A315542677845464144414E42676B7167527A50565147434C514546414152484D455543495144483365507A71346E594A3870416F644A7971504B7143517551776D4F70796A2F72576344494C7A466A32674967555735633957366A44377539316F704D634477617734614E457645744758366B73355844494D496B556A493D0001
801200A83C4D61696E426F64793E3C4D736749643E3C49643E3030303030303030303030303030303230313830393138313030303030383632373C2F49643E3C4372654474546D3E323031382D30392D31375431393A30363A33393C2F4372654474546D3E3C2F4D736749643E3C436572744E746663746E496E663E3C43686E6754703E434330303C2F43686E6754703E3C2F436572744E746663746E496E663E3C2F4D61696E426F64793E
0155
7141694541307355796B57394533364633715139315944766173516738456E4F4D703169646867743670712F4E55415978676467776764554341514577616A42684D517377435159445651514745774A44546A45774D433447413155454367776E51326870626D4567526D6C755957356A6157467349454E6C636E52705A6D6C6A59585270623234675158563061473979615852354D534177486759445651514444426444526B4E42494546445579425552564E5549464E4E4D6942505130457A4D51494651414B4141585177444159494B6F45637A315542677845464144414E42676B7167527A50565147434C514546414152484D455543495144483365507A71346E594A3870416F644A7971504B7143517551776D4F70796A2F72576344494C7A466A32674967555735633957366A44377539316F704D634477617734614E457645744758366B73355844494D496B556A493D0001
801200A83C4D61696E426F64793E3C4D736749643E3C49643E3030303030303030303030303030303230313830393138313030303030383632373C2F49643E3C4372654474546D3E323031382D30392D31375431393A30363A33393C2F4372654474546D3E3C2F4D736749643E3C436572744E746663746E496E663E3C43686E6754703E434330303C2F43686E6754703E3C2F436572744E746663746E496E663E3C2F4D61696E426F64793E
0544
4D4949443767594B4B6F45637A31554741515143417143434139347767675061416745424D513477444159494B6F45637A315542677845464144414D42676F7167527A5056515942424149426F494943326A43434174597767674A366F414D434151494342554143674146304D41774743437142484D395641594E31425141775954454C4D416B474131554542684D43513034784D44417542674E5642416F4D4A304E6F6157356849455A70626D467559326C68624342445A584A3061575A7059324630615739754945463164476876636D6C30655445674D423447413155454177775851305A445153424251314D6756455654564342545454496754304E424D7A45774868634E4D5463784D5445324D4459314E4451315768634E4D6A49784D5445324D4459314E445131576A4342677A454C4D416B474131554542684D43513034784844416142674E5642416F4D45304E475130456756455654564342545454496754304E424D7A4578446A414D42674E564241734D42564E49513142464D526B77467759445651514C44424250636D6468626D6C365958527062323568624330784D5373774B51594456515144444349774E544641354C694B357257333536576F356F3275354C716B35706954356F6D415145464251554642515541344D466B77457759484B6F5A497A6A3043415159494B6F45637A3155426769304451674145595041395551524C2F5A615468454E306E633353776B4F487734685044584739685A654B69426E4E646867507931457458344D793262704E4670594D6D51306E766B4A554D3471704A7246374D537145777336724C614F422B544342396A412F4267677242674546425163424151517A4D4445774C7759494B775942425155484D41474749326830644841364C79397659334E776447567A6443356A5A6D4E684C6D4E766253356A626A6F344D43397659334E774D42384741315564497751594D4261414641544876506C5A41576B2B6A44513249474959504E36387462734D4D41774741315564457745422F7751434D4141774E67594456523066424338774C5441726F436D674A34596C6148523063446F764C7A49784D4334334E4334304D69347A4C30394451544D784C314E4E4D69396A636D77784C6D4E796244414F42
3045022012D85D4913F0628CFBEBC562DD31D2F18A92EFB5F019DACA916E7A55
1205CFF4022100D2AA5BEA6D173AE640D9C3F0FA17199C8D4F4D36E1EBFE132E1B38DF7AD35988
3045022012D85D4913F0628CFBEBC562DD31D2F18A92EFB5F019DACA916E7A55
1205CFF4022100D2AA5BEA6D173AE640D9C3F0FA17199C8D4F4D36E1EBFE132E
0220
30440220
3044
0220
3045
0220
12D85D4913F0628CFBEBC562DD31D2F18A92EFB5F019DACA916E7A5502201205CFF4
0221
00D2AA5BEA6D173AE640D9C3F0FA17199C8D4F4D36E1EBFE132E
30440220
3045022012D85D4913F0628CFBEBC562DD31D2F18A92EFB5F019DACA916E7A551205CFF4022100D2AA5BEA6D173AE640D9C3F0FA17199C8D4F4D36E1EBFE132E
3045022012D85D4913F0628CFBEBC562DD31D2F18A92EFB5F019DACA916E7A551205CFF4022100D2AA5BEA6D173AE640D9C3F0FA17199C8D4F4D36E1EBFE132E1B38DF7AD35988
*/

View File

@ -8,14 +8,14 @@ import racal.sunyard.main.SydApi4j;
public class TestPKCS1 {
private static final String testData = "<MainBody><MsgId><Id>101557000040870201809190000000001</Id><CreDtTm>2018-09-19T10:13:39</CreDtTm></MsgId><Qryr><MbrId>101557</MbrId><BrId>000040870</BrId></Qryr><Rspnr><MbrId>201597</MbrId><BrId>000039754</BrId></Rspnr><BizQryInf><QryDt>2018-09-19</QryDt><QryId>00000001</QryId><Cnts>123456测试</Cnts></BizQryInf></MainBody>";
private static final String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
private static final String testData = "1234567812345678";
private static final String testCertNo = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
public static void main(String[] args) {
// 连接加密机
SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000);
SydApi4j api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
try {

View File

@ -9,20 +9,20 @@ public class TestPKCS7 {
private static final String testData = "<MainBody><MsgId><Id>101557000040870201809190000000001</Id><CreDtTm>2018-09-19T10:13:39</CreDtTm></MsgId><Qryr><MbrId>101557</MbrId><BrId>000040870</BrId></Qryr><Rspnr><MbrId>201597</MbrId><BrId>000039754</BrId></Rspnr><BizQryInf><QryDt>2018-09-19</QryDt><QryId>00000001</QryId><Cnts>123456测试</Cnts></BizQryInf></MainBody>";
private static final String testPubKey = "034200043EDA3A107B7CC35CC005C7FBF0BB4E6B43A07EE14E360603D22ECA2A600B2D0FA03055D400D1240300F54648B849D13F50B330FF14351B5645B13686820A65BB";
private static final String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
private static final String testCertNo = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
public static void main(String[] args) {
// 连接加密机
// SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000);
SydApi4j.SYD_Set_Parameter_HA("unkown", "172.16.18.69", 8889, 1000);
SydApi4j.SYD_Set_Parameter_HA("unkown", "192.168.0.100", 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j();
try {
// 基础接口 原始数据模式
case1( api );
/*
// 基础接口 HASH 数据模式
case2( api );
@ -30,7 +30,7 @@ public class TestPKCS7 {
case3( api );
// HASH 模式专用接口
case4( api );*/
case4( api );
} catch (Exception e) {

11
说明.txt Normal file
View File

@ -0,0 +1,11 @@
sydapi1.12 签名验签使用的 jar
- sample 示例代码
- jar
- sydapi4j.jar SDK 无依赖(依赖外置)
- sydapi4j-jar-with-dependencies.jar 依赖内置,用于快速测试
- dependences.xml 所有依赖 Maven 格式说明
- dependences 所有依赖
- groovy-all-2.3.2 通信协议支持
- jcommander-1.30 命令行支持
- proto-1.0-20220412 通信协议支持
- alf4j-api-1.7.10 日志接口