6 Commits
Author SHA1 Message Date
cheney 10d9d1b0d6 优化通信 2026-06-02 17:58:02 +08:00
cheney b8322538e7 QN 指令长度错误 2026-06-02 16:26:54 +08:00
cheney 83802b6ef6 强制指定大端模式 2026-06-02 15:06:29 +08:00
cheney 9062a9c17c 测试代码整理 2026-06-01 17:57:23 +08:00
cheney 88f4bdf603 测试代码整理 2026-06-01 13:41:28 +08:00
cheney 385e77b766 调整协议,index 改为 4 字节。 2026-06-01 10:02:49 +08:00
18 changed files with 174 additions and 365 deletions
+2 -2
View File
@@ -50,8 +50,8 @@
</options> </options>
</error> </error>
<pk len="32" cn="公钥"></pk> <pk len="128" cn="公钥"></pk>
<sk len="160" cn="私钥"></sk> <sk len="64" cn="私钥"></sk>
</data> </data>
+30
View File
@@ -0,0 +1,30 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0
http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>assembled-test-jar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- 打包主代码 -->
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<!-- 打包测试代码 -->
<fileSet>
<directory>${project.build.testOutputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<!-- 打包依赖的Jar包 -->
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
+4 -17
View File
@@ -182,22 +182,6 @@
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.xxx.uploadFile</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
@@ -224,9 +208,12 @@
<plugin> <plugin>
<artifactId>maven-assembly-plugin</artifactId> <artifactId>maven-assembly-plugin</artifactId>
<configuration> <configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<archive> <archive>
<manifest> <manifest>
<mainClass>com.Sample.TestDemo</mainClass> <mainClass>sample.TestDemo</mainClass>
</manifest> </manifest>
</archive> </archive>
<descriptorRefs> <descriptorRefs>
@@ -45,6 +45,9 @@ public class SydApiException extends RuntimeException{
case 4: case 4:
msg = "DER 编码格式错误(公钥) "; msg = "DER 编码格式错误(公钥) ";
break; break;
case 0xd:
msg = "公钥加密错误";
break;
case 21: case 21:
msg = "输入的数据格式错误 "; msg = "输入的数据格式错误 ";
break; break;
+63 -40
View File
@@ -51,6 +51,7 @@ import java.net.Socket;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.security.NoSuchProviderException; import java.security.NoSuchProviderException;
import java.security.Security; import java.security.Security;
@@ -2586,49 +2587,69 @@ public class SydApi4j implements SydApi {
private ByteBuffer read(Socket socket) throws IOException { private ByteBuffer read(Socket socket) throws IOException {
InputStream is = socket.getInputStream(); InputStream is = socket.getInputStream();
int d; byte[] buf = new byte[2];
int high = is.read(); int offset = 0;
int low = is.read(); int remaining = 2;
int len = (high << 8) + low; while (remaining > 0) {
int read = is.read(buf, offset, remaining);
if (read == -1) {
throw new EOFException("Expected 2 bytes, but reached end of stream after reading " + offset + " byte(s)");
}
offset += read;
remaining -= read;
}
int len = ((buf[0] & 0xFF) << 8) | (buf[1] & 0xFF);
len += 2; len += 2;
if(debug){ if(debug){
print("H\t"); print("接收数据\t");
println(Integer.toHexString(high)); // print("H=");
print("L\t"); // print(Integer.toHexString(high));
println(Integer.toHexString(low)); // print("\tL=");
print("Len\t"); // print(Integer.toHexString(low));
print("\tLen=");
println(len); println(len);
} }
ByteBuffer bb = ByteBuffer.allocate(len); ByteBuffer bb = ByteBuffer.allocate(len);
bb.put((byte) (high & 0xFF)); bb.put(buf);
// bb.put((byte) (high & 0xFF));
//println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (high & 0xFF)}))); //println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (high & 0xFF)})));
bb.put((byte) (low & 0xFF)); // bb.put((byte) (low & 0xFF));
//println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (low & 0xFF)}))); //println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (low & 0xFF)})));
// int d = 0;
// while (true) {
// d = is.read();
// if (-1 == d) {
// break;
// }
//
// bb.put((byte) (d & 0xFF));
//
// //println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (d & 0xFF)})));
//
// if (bb.position() == len) {
// break;
// }
// }
remaining = len - bb.position(); // 还需要读取的字节数
byte[] buffer = new byte[8192]; // 批量读取缓冲区
while (true) { while (remaining > 0) {
d = is.read(); int toRead = Math.min(remaining, buffer.length);
if (-1 == d) { int bytesRead = is.read(buffer, 0, toRead);
break; if (bytesRead == -1) {
} // 与原逻辑不同:这里抛异常,而不是静默退出
throw new EOFException("Unexpected end of stream; expected " + remaining + " more bytes");
bb.put((byte) (d & 0xFF));
//println(String.format("%d %d %s",len, bb.position() -1, Util.bytes2HexString(new byte[]{(byte) (d & 0xFF)})));
if (bb.position() == len) {
break;
} }
bb.put(buffer, 0, bytesRead);
remaining -= bytesRead;
} }
if (null != builder && builder.isUseEBCDMode()) { if (null != builder && builder.isUseEBCDMode()) {
// print("EBCD 数据: \t"); // print("EBCD 数据: \t");
// println(Util.bytes2HexString(bb.array())); // println(Util.bytes2HexString(bb.array()));
@@ -2662,8 +2683,10 @@ public class SydApi4j implements SydApi {
ByteBuffer bb = read(socket); ByteBuffer bb = read(socket);
return bb; return bb;
} catch (SocketTimeoutException e) { } catch (EOFException e) {
throw new SydApiException("接收数据超时", -2); throw new SydApiException("接收数据不完整", -21, e);
}catch (SocketTimeoutException e) {
throw new SydApiException("接收数据超时", -2, e);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -6901,18 +6924,18 @@ public class SydApi4j implements SydApi {
bb.put("7F".getBytes()); bb.put("7F".getBytes());
bb.put((byte) dataType); // 数据包标志 bb.put((byte) dataType); // 数据包标志
if ( 2 == dataType ) { // 公钥 if ( 2 == dataType ) { // 公钥
bb.put(ByteUtil.shortToBytes((short) publicKey.length)); bb.put(ByteUtil.shortToBytes((short) publicKey.length, ByteOrder.BIG_ENDIAN) );
bb.put(publicKey); bb.put(publicKey);
} }
if ( 1 == dataType ) { // 数据 if ( 1 == dataType ) { // 数据
bb.put(ByteUtil.shortToBytes((short) pOrgData.limit())); bb.put(ByteUtil.shortToBytes((short) pOrgData.limit(), ByteOrder.BIG_ENDIAN));
bb.put(pOrgData); bb.put(pOrgData);
bb.put(ByteUtil.shortToBytes((short)idx)); bb.put(ByteUtil.intToBytes(idx));
} }
if ( 3 == dataType) { // 仅数据长度 if ( 3 == dataType) { // 仅数据长度
bb.put( ByteUtil.shortToBytes((short) (63*1024)) ); bb.put( ByteUtil.shortToBytes((short) (63*1024), ByteOrder.BIG_ENDIAN) );
bb.put( ByteUtil.shortToBytes((short)idx)); bb.put( ByteUtil.intToBytes(idx, ByteOrder.BIG_ENDIAN));
} }
@@ -6943,7 +6966,7 @@ public class SydApi4j implements SydApi {
int isLast = bb.get(); int isLast = bb.get();
byte[] dataLenArr = new byte[2]; byte[] dataLenArr = new byte[2];
bb.get(dataLenArr); bb.get(dataLenArr);
int dataLen = ByteUtil.bytesToInt(dataLenArr); int dataLen = ByteUtil.bytesToInt(dataLenArr, ByteOrder.BIG_ENDIAN);
// byte[] data = new byte[dataLen]; // byte[] data = new byte[dataLen];
// bb.get(data); // bb.get(data);
ByteBuffer slice = ByteBufferUtil.sliceAndConsume(bb, dataLen); ByteBuffer slice = ByteBufferUtil.sliceAndConsume(bb, dataLen);
@@ -7036,17 +7059,17 @@ public class SydApi4j implements SydApi {
bb.put((byte) dataType); bb.put((byte) dataType);
if (dataType == 2) { // 私钥 if (dataType == 2) { // 私钥
bb.put(ByteUtil.shortToBytes((short) privateKey.length)); bb.put(ByteUtil.shortToBytes((short) privateKey.length, ByteOrder.BIG_ENDIAN));
bb.put(privateKey); bb.put(privateKey);
} }
if (dataType == 1) { // 密文块 if (dataType == 1) { // 密文块
bb.put(ByteUtil.shortToBytes((short) pCipherData.limit())); bb.put(ByteUtil.shortToBytes((short) pCipherData.limit(), ByteOrder.BIG_ENDIAN));
bb.put(pCipherData); bb.put(pCipherData);
bb.put(ByteUtil.shortToBytes((short) idx)); bb.put(ByteUtil.intToBytes(idx, ByteOrder.BIG_ENDIAN));
} }
if (dataType == 3) { // 请求明文块 if (dataType == 3) { // 请求明文块
bb.put(ByteUtil.shortToBytes((short) (63 * 1024))); bb.put(ByteUtil.shortToBytes((short) (63 * 1024), ByteOrder.BIG_ENDIAN));
bb.put(ByteUtil.shortToBytes((short) idx)); bb.put(ByteUtil.intToBytes(idx, ByteOrder.BIG_ENDIAN));
} }
// 填写总长度(长度字段本身不包含在内) // 填写总长度(长度字段本身不包含在内)
@@ -7073,7 +7096,7 @@ public class SydApi4j implements SydApi {
int isLast = bb.get(); int isLast = bb.get();
byte[] dataLenArr = new byte[2]; byte[] dataLenArr = new byte[2];
bb.get(dataLenArr); bb.get(dataLenArr);
int dataLen = ByteUtil.bytesToInt(dataLenArr); int dataLen = ByteUtil.bytesToInt(dataLenArr, ByteOrder.BIG_ENDIAN);
ByteBuffer slice = ByteBufferUtil.sliceAndConsume(bb, dataLen); ByteBuffer slice = ByteBufferUtil.sliceAndConsume(bb, dataLen);
return new MutiReturn7(retCode, isLast, slice); return new MutiReturn7(retCode, isLast, slice);
} else { } else {
+60 -24
View File
@@ -1,29 +1,44 @@
package cmbpoc; package cmbpoc;
import com.sunyard.RetWrap;
import com.sunyard.SydApi;
import com.sunyard.proto.PacketSection;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;
import org.junit.After; import org.junit.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApi4j;
public class FunctionTest { public class FunctionTest {
private SydApi4j api; private SydApi4j api;
private String keypairIndex; private String keypairIndex4Sign = "0000000000000sge00000000001";
private byte[] privateKey; private String keypairIndex4Ende = "0000000000000sge00100000001";
private byte[] publicKey; private byte[] privateKey4Sign;
private byte[] orgData; private byte[] publicKey4Sign;
private byte[] privateKey4Ende;
private byte[] publicKey4Ende;
private byte[] orgData = new byte[15];
private String sign; private String sign;
@Before @Before
public void start(){ public void start(){
// 调试模式 // 调试模式
System.setProperty("com.sunyard.sydapi4j.debug", "true"); System.setProperty("com.sunyard.sydapi4j.debug", "true");
// 建立链接(单台) // 建立链接(单台)
this.api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000); this.api = (SydApi4j) new SydApi4j().connect("192.168.100.145", 8889, null, 5000);
// RetWrap keypair = this.getPrivateKeyAndPublickKey(keypairIndex4Sign);
// this.publicKey4Sign = Util.hexString2Bytes( keypair.get("pk").toString() );
// this.privateKey4Sign = Util.hexString2Bytes( keypair.get("sk").toString() );
//
// RetWrap keypair4Ende = this.getPrivateKeyAndPublickKey(keypairIndex4Sign);
// this.publicKey4Ende = Util.hexString2Bytes( keypair4Ende.get("pk").toString() );
// this.privateKey4Ende = Util.hexString2Bytes( keypair4Ende.get("sk").toString() );
this.publicKey4Ende = Util.hexString2Bytes("03420004AF3D4E55D26564C6C937E6EA9232691C01AC5E7916AD2136F788CE7C1E4D0AE8C4754DEC2F7F6A78962D51A171A6F5B4F11823390AEC8B5B0246CD2CCF8052B7");
this.privateKey4Ende = Util.hexString2Bytes("00010000963F7C3A98B7810F52D2861A060E18A9D4D59796CF33967DD61EEDA091E1AD9B0000000000000000000000000000000000000000000000000000000000000000");
} }
@@ -37,35 +52,56 @@ public class FunctionTest {
@Ignore
@Test @Test
public void getPrivateKeyAndPublickKey(){ public void genKeyPair(){
this.publicKey = Util.hexString2Bytes( // RetWrap r = this.api.SYD_SM2GenKeyPair();
this.api.SM2GetPublicKeyC(keypairIndex) // String pk = r.get("publicKey").toString();
); // String sk = r.get("privateKey").toString();
//
// System.out.println("pk=" + pk);
// System.out.println("sk=" + sk);
//
// this.privateKey4Sign = Util.hexString2Bytes(sk);
// this.publicKey4Sign = Util.hexString2Bytes(pk);
RetWrap rw = this.api.SM2GenKeyPair();
byte[] pk = (byte[]) rw.get(SydApi.RET_PUBLIC_KEY);
byte[] sk = (byte[]) rw.get(SydApi.RET_PRIVATE_KEY);
System.out.println("pk=" + Util.bytes2HexString(pk));
System.out.println("sk=" + Util.bytes2HexString(sk));
}
this.privateKey = Util.hexString2Bytes( public RetWrap getPrivateKeyAndPublickKey(String keypairIndex){
this.api.SM2GetPrivateKeyC(keypairIndex) String pk = this.api.SM2GetPublicKeyC(keypairIndex);
); String sk = this.api.SM2GetPrivateKeyC(keypairIndex);
System.out.println("pk=" + pk);
System.out.println("sk=" + sk);
RetWrap retWrap = new RetWrap();
retWrap.put("pk", pk);
retWrap.put("sk", sk);
return retWrap;
} }
@Test @Test
public void SYD_SM2_Sign(){ public void SYD_SM2_Sign(){
this.api.SYD_SM2_Sign_HA(1, privateKey, publicKey, orgData); String sign = this.api.SYD_SM2_Sign_HA(1, privateKey4Sign, publicKey4Sign, orgData);
this.api.SYD_SM2_Verify_HA(1, publicKey, orgData, sign); this.api.SYD_SM2_Verify_HA(1, publicKey4Sign, orgData, sign);
} }
@Test @Test
public void SYD_SM2_Encrypt(){ public void SYD_SM2_Encrypt(){
byte[] enData = this.api.SYD_SM2_Encrypt(publicKey, orgData); byte[] enData = this.api.SYD_SM2Encrypt(publicKey4Ende, orgData);
byte[] deData = this.api.SYD_SM2Decrypt(privateKey, enData); // byte[] deData = this.api.SYD_SM2Decrypt(publicKey4Ende, enData);
Assert.assertArrayEquals(enData, deData); // Assert.assertArrayEquals(enData, deData);
} }
} }
+3 -11
View File
@@ -6,8 +6,6 @@ import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.SampleResult;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class JmeterTest extends AbstractJavaSamplerClient { public class JmeterTest extends AbstractJavaSamplerClient {
@@ -18,19 +16,13 @@ public class JmeterTest extends AbstractJavaSamplerClient {
@Override @Override
public Arguments getDefaultParameters() { public Arguments getDefaultParameters() {
Arguments params = new Arguments(); Arguments params = new Arguments();
params.addArgument("publicKeyBase64", "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE..."); params.addArgument("function", "sleep");
params.addArgument("plainText", "Hello JMeter"); params.addArgument("sleep", "1");
return params; return params;
} }
@Override @Override
public void setupTest(JavaSamplerContext context) { public void setupTest(JavaSamplerContext context) {
// 初始化:将 Base64 参数转为字节数组,避免每个循环都转换
String pubBase64 = context.getParameter("publicKeyBase64");
String plainText = context.getParameter("plainText");
publicKey = Base64.getDecoder().decode(pubBase64);
plainData = plainText.getBytes(StandardCharsets.UTF_8);
// 校准测试 // 校准测试
sleep = context.getIntParameter("sleep", 1); sleep = context.getIntParameter("sleep", 1);
@@ -57,7 +49,7 @@ public class JmeterTest extends AbstractJavaSamplerClient {
case "SYD_SM2_Sign": case "SYD_SM2_Sign":
break; break;
case "sleep": case "sleep":
Thread.sleep(1); Thread.sleep( this.sleep );
break; break;
default: default:
break; break;
@@ -18,9 +18,9 @@ public class SignatureVerifyTest {
@Before @Before
public void setUp() { public void setUp() {
System.setProperty("com.sunyard.sydapi4j.debug", "true"); System.setProperty("com.sunyard.sydapi4j.debug", "true");
this.api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000); this.api = (SydApi4j) new SydApi4j().connect("172.1.41.139", 8889, null, 3000);
this.orgData = "Hello, World! 测试数据".getBytes(); this.orgData = "Hello, World! 测试数据".getBytes();
this.SM2dn = "C=CN,ST=北京,L=北京,O=信雅达,CN=172.1.40.188"; this.SM2dn = "C=cn,O=CFCA OCA1 SM2,OU=Local RA OCA1,OU=Units,CN=041@N91330108762038374D@sunyard@00000064";
} }
@After @After
@@ -71,7 +71,7 @@ public class SignatureVerifyTest {
byte[] cipherKey = (byte[]) genResult.get(SydApi.RET_CIPHER_KEY); byte[] cipherKey = (byte[]) genResult.get(SydApi.RET_CIPHER_KEY);
Assert.assertNotNull("数字信封密文密钥不应为空", cipherKey); Assert.assertNotNull("数字信封密文密钥不应为空", cipherKey);
System.out.println("数字信封密文密钥: " + new String(cipherKey)); System.out.println("数字信封密文: " + new String(cipherKey));
RetWrap decryptResult = this.api.decryptDEByDN(SM2dn, cipherKey); RetWrap decryptResult = this.api.decryptDEByDN(SM2dn, cipherKey);
Assert.assertNotNull("数字信封解密结果不应为空", decryptResult); Assert.assertNotNull("数字信封解密结果不应为空", decryptResult);
@@ -1,50 +0,0 @@
package com.sunyard.sydapi.loadrunner;
import com.sunyard.sydapi.loadrunner.action1.Actions;
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
public class ShangTest {
private static final String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
private static final byte[] testData = new byte[ 4 * 1024 ];
private SydApi4j api = null;
public void init() throws Exception {
if ( null == api ) {
api = (SydApi4j) new SydApiBuilder()
.setIp("172.16.18.59") // 192.168.0.162
.setPort( 8889 )
.useDebugMode()
.build();
}
}
public void action(){
String sign = api.attachedSign(testData, dn);
boolean ret = api.attachedVerify( sign );
assert ret;
}
public void end(){
if (null != this.api ) {
this.api.disconnect();
}
}
public static void main(String[] args) throws Throwable {
System.out.println( SydApi4j.getVersion() );
// Actions test = new Actions();
ShangTest test = new ShangTest();
test.init();
test.action();
test.end();
}
}
@@ -1,44 +0,0 @@
package com.sunyard.sydapi.loadrunner.action1;
/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
public class Actions
{
private static final byte[] testData = new byte[ 4 * 1024 ];
private SydApi4j api = null;
public int init() throws Throwable {
if ( null == api ) {
api = (SydApi4j) new SydApiBuilder()
.setIp("172.16.18.59")
.setPort( 8889 )
.useDebugMode()
.build();
}
return 0;
}//end of init
public int action() throws Throwable {
api.SM3Hash( testData );
return 0;
}//end of action
public int end() throws Throwable {
if (null != this.api ) {
this.api.disconnect();
}
return 0;
}//end of end
}
@@ -1,75 +0,0 @@
package com.sunyard.sydapi.loadrunner.raw;
/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/
import lrapi.lr;
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
import com.sunyard.proto.Util;
import com.sunyard.SydApi;
public class Actions
{
private static final String inHexData = "67c6697351ff4aec29cdbaabf2fbe346";
private static String pk ;
private static String sk ;
private SydApi api;
public int init() throws Throwable {
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.1.123");
api = builder.build();
this.pk = api.SM2GetPublicKeyC("123", 0 );
this.sk = api.SM2GetPrivateKeyC("123");
return 0;
}//end of init
public int action() throws Throwable {
lr.start_transaction("auto");//设置事务开始点
try {
System.out.println("begin SYD_Sign_P1");
byte[] sign = this.api.SM2SignC( 0 , sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
System.out.println("sign=" + Util.bytes2HexString( sign ));
System.out.println("begin SYD_Verify_P1");
boolean pass = api.SM2Verify(1, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
System.out.println("验签结果 " + pass);
System.out.println("end SYD_Verify_P1");
} finally {
lr.end_transaction("auto", lr.AUTO);//设置事务结束点
}
return 0;
}//end of action
public int end() throws Throwable {
return 0;
}//end of end
public static void main(String[] args) throws Throwable {
Actions actions = new Actions();
actions.init();
actions.action();
actions.end();
}
}
@@ -1,76 +0,0 @@
package com.sunyard.sydapi.loadrunner.raw_uid;
/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*
*/
import lrapi.lr;
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
import com.sunyard.proto.Util;
import com.sunyard.SydApi;
public class Actions
{
private static final String inHexData = "67c6697351ff4aec29cdbaabf2fbe346";
private static final String uid = "8765432187654321";
private static String pk ;
private static String sk ;
private SydApi api;
public int init() throws Throwable {
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.1.123");
api = builder.build();
this.pk = api.SM2GetPublicKeyC("123", 0 );
this.sk = api.SM2GetPrivateKeyC("123");
return 0;
}//end of init
public int action() throws Throwable {
lr.start_transaction("auto");//设置事务开始点
try {
System.out.println("begin SYD_Sign_P1");
byte[] sign = this.api.SM2SignC( 0, uid , sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
System.out.println("sign=" + Util.bytes2HexString( sign ));
System.out.println("begin SYD_Verify_P1");
boolean pass = api.SM2Verify( uid, 1, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
System.out.println("验签结果 " + pass);
System.out.println("end SYD_Verify_P1");
} finally {
lr.end_transaction("auto", lr.AUTO);//设置事务结束点
}
return 0;
}//end of action
public int end() throws Throwable {
return 0;
}//end of end
public static void main(String[] args) throws Throwable {
Actions actions = new Actions();
actions.init();
actions.action();
actions.end();
}
}
@@ -1,6 +1,6 @@
package com.jmeter.test; package jmeter;
import com.Sample.SydUtils; import sample.SydUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.sunyard.SydApiException; import com.sunyard.SydApiException;
import com.sunyard.entity.ImportResult; import com.sunyard.entity.ImportResult;
@@ -17,7 +17,7 @@ import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
public class Test4Jemter extends AbstractJavaSamplerClient { public class Test4Jmeter extends AbstractJavaSamplerClient {
private String SM2dn ; private String SM2dn ;
private String RSAdn ; private String RSAdn ;
-14
View File
@@ -1,14 +0,0 @@
package lrapi;
public class lr {
public static String AUTO = "AUTO";
public static void start_transaction(String t) {
System.out.println("start_transaction" + t);
}
public static void end_transaction(String t, String type) {
System.out.println("end_transaction" + t);
}
}
@@ -1,4 +1,4 @@
package com.Sample; package sample;
import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApi4j;
@@ -1,4 +1,4 @@
package com.sample; package sample;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
-3
View File
@@ -1,10 +1,7 @@
package sample; package sample;
import cn.hutool.core.date.StopWatch; import cn.hutool.core.date.StopWatch;
import com.Sample.SydUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.sunyard.RetWrap;
import com.sunyard.SydApi;
import com.sunyard.SydApiException; import com.sunyard.SydApiException;
import com.sunyard.entity.ImportResult; import com.sunyard.entity.ImportResult;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;
@@ -1,4 +1,4 @@
package com.Sample; package sample;
import com.sunyard.RetWrap; import com.sunyard.RetWrap;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;