原文签名

1、Z值计算:

public static final String ecc_a = "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC";
public static final String ecc_b = "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93";
public static final String ecc_gx = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7";
public static final String ecc_gy = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0";
private static final String SM2_ID = "31323334353637383132333435363738";

public byte[] sm2GetZSM(String smX, String smY) {RefUtil.d("x : " + smX + " , y:" + smY);
    SM3Digest sm3 = new SM3Digest();
    byte[] userId = Util.hexStringToBytes(SM2_ID);
    int len = userId.length * 8;
    sm3.update((byte) (len >> 8 & 255));
    sm3.update((byte) (len & 255));
    sm3.update(userId, 0, userId.length);
    byte[] p = Util.hexStringToBytes(this.ecc_a);
    sm3.update(p, 0, p.length);
    p = Util.hexStringToBytes(this.ecc_b);
    sm3.update(p, 0, p.length);
    p = Util.hexStringToBytes(this.ecc_gx);
    sm3.update(p, 0, p.length);
    p = Util.hexStringToBytes(this.ecc_gy);
    sm3.update(p, 0, p.length);
    p = Util.hexStringToBytes(smX);
    sm3.update(p, 0, p.length);
    p = Util.hexStringToBytes(smY);
    sm3.update(p, 0, p.length);
    byte[] md = new byte[sm3.getDigestSize()];
    sm3.doFinal(md, 0);
    return md;
}

2、使用Z值和待签名数据通过SM3算的杂凑值,该杂凑值用于SM2签名

public byte[] sm2GetSignData(byte[] z, byte[] sourceData) {SM3Digest sm3 = new SM3Digest();
    sm3.update(z, 0, z.length);
    sm3.update(sourceData, 0, sourceData.length);
    byte[] md = new byte[sm3.getDigestSize()];
    sm3.doFinal(md, 0);
    return md;
}

3、做签名,验签时同理,执行1、2 获取验签原文,之后验证签名。

HASH签名:

不执行上述1、2,直接做签名,之后验证签名,可以使用工具 Sign_E、 Verify_E。

上述两种方式,均可使用sm2签名工具校验通过。

SM2 原文签名与HASH签名实现区别相关推荐

  1. Windows gmssl生成SM2证书 + java bc库签名验签

    Windows gmssl生成SM2证书 + java bc库签名验签 openssl生成SM2证书 1 生成密钥 gmssl ecparam -genkey -name sm2p256v1 -tex ...

  2. 超级签名源码_企业签名和超级签名有哪些区别?

    我们知道iOS系统对于非App Store中的应用是有安装限制的,而App Store严格的审核机制又将许多APP拒之门外,这令不少开发者们郁闷不已. 所以很多开发者们会选择苹果签名的方式,让自己的i ...

  3. 群签名和环签名的区别_苹果企业签名和苹果超级签名的区别

    iPhone使用的用户越来越多,现在苹果APP的签名业务也逐渐成熟,苹果签名可以解决APP上架问题上架APP非常的漫长并且非常的严格,现在除了苹果企业签名还有了苹果超级签名,不过这两种签名之间又有什么 ...

  4. hash签名 java_java开发区块链只需150行代码

    原标题:java开发区块链只需150行代码 本文帮助你理解什么是区块链.将通过java开发区块链的实战学习方式,用 Java创建开发一个基本的区块链,实现简单的工作量证明系统.Java开发区块链的源代 ...

  5. 群签名和环签名的区别_环签名,聚合签名

    本文主要对当下的一些密码学技术的简单阐述 参考文献: 环签名 环签名(ring signature)是一种数字签名方案,最初由Rivest等人提出,环签名是一种简化的群签名,环签名中只有环成员没有管理 ...

  6. Android APK签名总结-- V1签名和V2签名使用和区别

    1. 工具介绍 jarsigner 是JDK提供的针对jar包签名的通用工具, 位于 JDK/bin/jarsignerapksigner 是Google官方提供的针对Android apk 签名验证 ...

  7. 【单机版,以两个文件为例】K-Shingle+最小Hash签名+LSH算法+LSH族....Java代码

    import java.util.ArrayList; import java.util.Random; import java.util.Scanner; import java.io.*; imp ...

  8. 群签名和环签名的区别_超级签名和TF签名使用个人开发者账号的区别是什么?...

    了解过当前ios签名的朋友都知道,目前ios签名共分为企业签名.超级签名和TF签名,其中企业签名作为签名行业的"老大哥",深受各路开发者和App运营商的喜爱.而我们今天的主角却是其 ...

  9. 群签名和环签名的区别_环签名方案的研究

    摘要: 信息时代虽然带给我们无限商机与方便,但也充斥着隐患与危险.由于网络容易受到攻击,导致机密信息的泄密,数据被篡改,轻则引发企业,部门工作陷入瘫痪,个人利益受损,重则危及国家安全和社会稳定,因此保 ...

最新文章

  1. 其它综合-使用Putty远程连接管理Linux实践
  2. 一个包的TcpServer流程
  3. time模块 random模块
  4. C语言中,scanf与scanf_s的简单区别
  5. 深入解析react关于事件绑定this的四种方式
  6. 教你如何在Android Studio中使用DDMS工具查看logcat——移动测试Android app(app的性能监控与测试)
  7. 什么是函数式编程思维?
  8. seata分布式事务原理_又见分布式事务之Seata
  9. 电脑格式化的危害_经常重装系统,对电脑会不会有负面影响?
  10. 二进制十进制间小数怎么转换
  11. Windows屏幕工具(屏幕截图、贴图/屏幕取色/截图文字、表格识别/截图翻译、GIF录屏、GIF压缩)
  12. android友盟错误日志,友盟崩溃日志分析三种方式
  13. OpenStack HA集群3-Pacemake Corosync
  14. 恶性淋巴瘤及其实验诊断题库【1】
  15. MATLAB画固定大小的彩色图片
  16. php用户登录论坛系统,discuz论坛 用户登录 后台程序代码
  17. 全国、省、市互联网普及率各区县电话用户数(2000至2020年)
  18. 三个月自学自动化测试,鬼知道我经历了什么?薪资从4.5K到11K
  19. 黑豆文本转语音工具V1.3(有声小说,地摊语音等制作领导者)
  20. Woaw Gallery中环和湾仔空间呈献国际艺术家群展

热门文章

  1. python 内置模块之os、sys、shutil
  2. 广州市白云区2021-2022学年九年级第一学期期末考试英语试题
  3. web前端开发与应用——选择器
  4. Centos 7 安装 ORACLE 11g
  5. 12月20日的贷款结息
  6. ios和平精英更新显示无法连接服务器,和平精英ios更新不了怎么办 ios更新不了解决方法...
  7. JS的 try catch使用心得
  8. js 正则表达式禁止输入框输入特殊字符遇到的坑以及解决方案
  9. HTML中的超链接(a元素)用法详解
  10. require,import和import()函数的区别