精易论坛

标题: JAVA转E语言 [打印本页]

作者: 六安小朱    时间: 2024-11-15 11:05
标题: JAVA转E语言
package cn.hsa.interfaceSignDemo;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.bouncycastle.crypto.RuntimeCryptoException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.jupiter.api.Test;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

/**
* @author hezhiling
* @Version 1.0
* @date 2021-10-19 20:57:41
*/
public class SignGenerator {
    private final static String SECRET = "secret";

    public static String encrytSHA256(String content, String secret) {

        try {
            Security.addProvider(new BouncyCastleProvider());
            SecretKey secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSm3");
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            mac.init(secretKey);
            byte[] digest = mac.doFinal(content.getBytes("UTF-8"));
            return new HexBinaryAdapter().marshal(digest).toUpperCase();
        } catch (Exception e) {
            throw new RuntimeCryptoException("加密异常");
        }

    }

    @Test
    public void test() {
        JSONObject json = new JSONObject();
        json.put("a", "a");
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println("当前时间戳:" + currentTimeMillis);
        System.out.println("当前报文:" + json.toString());
        System.out.println(currentTimeMillis+ "\n" + json.toString());
        System.out.println(encrytSHA256(currentTimeMillis + "\n" + json.toString(), SECRET));
    }

    @Test
    public void test2() {
        JSONObject json = new JSONObject();
        json.put("infno", "5101");
        json.put("msgid", "63000000000000000000000008");
        json.put("mdtrtarea_admvs", "610602");
        json.put("insuplc_admdvs", "610602");
        json.put("recer_sys_code", "FSI_LOCAL");
        json.put("dev_no", "");
        json.put("dev_safe_info", "");
        json.put("cainfo", "");
        json.put("signtype", "");
        json.put("infver", "1.0");
        json.put("opter_type", "1");
        json.put("opter", "system");
        json.put("opter_name", "测试");
        json.put("inf_time", "2020-12-03 10:00:00");
        json.put("fixmedins_code", "H33010200001");
        json.put("fixmedins_name", "延安致美****");
        json.put("sign_no", "");
        JSONObject input = new JSONObject();
        input.put("hosp_dept_codg", "1");
        json.put("input", input);
        System.out.println(json.toString());
        System.out.println(encrytSHA256("1634710020" + "\n" + json.toString(), SECRET));
    }
}



作者: 丶TiGa    时间: 2024-11-15 11:13
你倒是把依赖的类发上来
作者: 六安小朱    时间: 2024-11-15 11:29
java签名

interface-sign-demo.rar

17.63 KB, 下载次数: 2


作者: 六安小朱    时间: 2024-11-15 12:14
1.3.3Hmac_SM3计算接口
函数:function ZJ_Hmac_SM3(key,secret,unix_timestamp,request_body)
1.3.3.1函数功能说明
生成签名信息接口。
1.3.3.2参数说明
key:统一下发给用户的key(组织机构编码)。
secret:进行Hmac计算时的秘钥secret(4至16位字符串)。
unix_timestamp:GMT时间戳串,传入”0”字符串时按系统时间运算,不为”0”字符串时按传入的值运算。
request_body:报文字符串。
作者: Hoibben    时间: 2024-11-16 01:49
很明显是国密SM3 易语言直接翻译太累 编译个DLL给易调用还差不多~


作者: 六安小朱    时间: 2024-11-16 11:26
已经弄好了,无需回复,申请关帖
作者: 1752328925    时间: 2024-11-16 23:41
要翻译test 还是test2 ?
作者: 云南丿小海堂    时间: 2024-11-18 13:01
.版本 2

.支持库 eHTTP
.支持库 eFile
.支持库 eText

.局部变量 SECRET, 文本型
SECRET = “secret”

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
_测试 ()
_测试2 ()

.子程序 encrytSHA256, 文本型, 公开, 加密字符串
.参数 content, 文本型
.参数 secret, 文本型
.局部变量 digest, 字节集
.局部变量 hexDigest, 文本型

digest = 计算HmacSm3 (content, secret)
hexDigest = 字节集转十六进制 (digest)
返回 (大写 (hexDigest))

.子程序 计算HmacSm3, 字节集, 私有, 使用sm3.dll计算HMAC-SM3
.参数 data, 文本型
.参数 key, 文本型
.局部变量 sm3Dll, 整数型
.局部变量 result, 字节集
.局部变量 dataSize, 整数型
.局部变量 keySize, 整数型

dataSize = 取字节集长度 (到字节集 (data))
keySize = 取字节集长度 (到字节集 (key))
sm3Dll = 调用外部DLL (“sm3.dll”, “HmacSm3”, 到字节集 (data), dataSize, 到字节集 (key), keySize, @result)
返回 (result)

.子程序 _测试, 子程序, 公开
.局部变量 json, 文本型
.局部变量 currentTimeMillis, 整数型
.局部变量 sign, 文本型

json = “{‘a’:’a’}”
currentTimeMillis = 取现行时间 ()
调试输出 (“当前时间戳:” + 到文本 (currentTimeMillis))
调试输出 (“当前报文:” + json)
调试输出 (到文本 (currentTimeMillis) + “\n” + json)
sign = encrytSHA256 (到文本 (currentTimeMillis) + “\n” + json, SECRET)
调试输出 (sign)

.子程序 _测试2, 子程序, 公开
.局部变量 json, 文本型
.局部变量 inputJson, 文本型
.局部变量 sign, 文本型

inputJson = “{‘hosp_dept_codg’:’1’}”
json = “{‘infno’:’5101’, ‘msgid’:’63000000000000000000000008’, ‘mdtrtarea_admvs’:’610602’, ‘insuplc_admdvs’:’610602’, ‘recer_sys_code’:’FSI_LOCAL’, ‘dev_no’:’’, ‘dev_safe_info’:’’, ‘cainfo’:’’, ‘signtype’:’’, ‘infver’:’1.0’, ‘opter_type’:’1’, ‘opter’:’system’, ‘opter_name’:’测试’, ‘inf_time’:’2020-12-03 10:00:00’, ‘fixmedins_code’:’H330102000001’, ‘fixmedins_name’:’延安致美****’, ‘sign_no’:’’, ‘input’:” + inputJson + “}”
调试输出 (json)
sign = encrytSHA256 (“1634710020\n” + json, SECRET)
调试输出 (sign)

.子程序 字节集转十六进制, 文本型, 公开
.参数 bytes, 字节集
.局部变量 i, 整数型
.局部变量 hexString, 文本型

hexString = “”
.判断循环首 (i < 取字节集长度 (bytes))
    hexString = hexString + 格式化数字 (取字节 (bytes, i), “HH”)
    i = i + 1
.判断循环尾 ()

返回 (hexString)

作者: 云南丿小海堂    时间: 2024-11-18 13:02
请楼主查看下

签名生成器易语言实现.txt

2.71 KB, 下载次数: 1






欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4