首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解国密SM2的加密和解密

这对于ECDHE密钥协商和ECDSA数字签名这两种用途而言确实是足够的。现有的网络库,很少将ECC算法直接用于加密和解密。...在A1步骤中,需要注意不能使用C语言中简单的随机数函数,因为这里 k 是一个很大的数字,有32字节,在GmSSL是 BIGNUM 结构来表示的。...在文档中没有找到说明,但我研究了GmSSL的源码,才弄明白要采用ASN.1 DER编码,这样接受方就可以通过DER解码,分别拿到x1、y1、C3、C2参数值。...关于DER编码解码,请参考相关的资料,一般网络库都会提供DER解码的函数,我们只要调用就可以了。 最后这一步,要是只看这份文档,就会掉进一个大坑。...实现了加密流程后,解密流程的实现就简单了,这里不再过多描述。

5.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    BIP66严格的DER签名(Strict DER signatures)

    综述: 该提案定义了比特币交易合法性规则的变化,用来限制签名字段必须为严格的DER编码。 动机: 当前比特币的签名验证实现依赖于OpenSSL,这意味着OpenSSL隐式的定义了比特币的区块验证规则。...,同时这个签名必须采用严格的DER编码。...如果签名时有效的DER编码,但是没有通过ECDSA验证,操作继续像以前一样执行,操作码执行停止并向栈顶push false(但是不会立即使脚本失败),在一些案例中,可能跳过一些签名(不使这些签名调用IsValidSignatureEncoding...DER编码参考 下面的代码指定了严格的DER检查行为。注意:这个函数测试一个签名字节向量,这个字节向量包含了一个额外字节的比特币签名哈希类型的标识。...s1 和 s2是对应于p1与 p2的有效签名。s1'与s2'是非DER的编码,但是使用相同公钥的有效签名。F是所有无效的DER兼容签名(包含0,这个空字符串)。F'是无效且非DER兼容的签名

    36820

    使用Java SDK实现离线签名

    严格来说,tx-signer并不属于SDK,它是bytomd中构建交易、对交易签名两大模块的java实现版。因此,若想用tx-signer对交易进行离线签名,需要由你在本地保管好自己的私钥。...当使用tx-signer构建完成一笔交易并签名后,若没有全节点的帮助,也需要自己实现P2P网络协议将交易广播到其他节点。...本文不会对以上技术细节进行讨论,而是利用bytomd全节点查询可用的utxo构建交易,对交易进行签名并序列化后,同样使用bytomd提交交易。...其中,第一个依赖是bytomd api的封装,可用于查询可用的utxo以及提交交易;第二个依赖用于构建交易以及对交易进行离线签名。...bytom java sdk:https://github.com/Bytom/bytom-java-sdk/

    1.4K40

    BIP146 解决签名编码的延展性

    综述 本提案描述了改变比特币交易的验证规则,来修正与ECDSA签名编码有关的交易延展性。 动机 签名延展性指的是:网络中的任何中继节点,不需要获取对应交易的私钥, 而修改该交易签名的能力。...自从严格的DER签名实施后,ECDSA签名中还有两个已知的延展性来源: ECDSA自身的签名延展性:ECDSA签名是自身具有延展性,因为内部S的负值(模曲线顺序)不会使签名无效。...0x1和0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,并且采用严格DER编码的S值。...如果传递给ECDSA验证的签名没有通过LOW_S 检查,并且是一个非空的字节数组,则整个脚本评估立即失败。...实施 参考客户端的实现可以在下述网址获得:github/interpreter.cpp 和 github/pull 脚注 P2WPKH的交易在BIP141中描述 请注意由于v0.13.1客户端中具体实现的细节

    51120

    虾说区块链-48-《精通比特币》笔记三

    数字签名:bitcoin中使用ECDSA算法,bitcoin中数字签名三种用法:其阿明证明私钥资金所有者,授权证明不可否认,签名证明交易(保证不能被任何人修改)。...数字签名通过ECDSA算法来实现,((Sig=F(F(m),dA))).dA签名私钥、m交易、F~hash~散列函数、F-sig~签名算法、Sig结果签名。...签名序列化:DER:序列化格式包含9个元素:DER序列的开始、序列的长度、一个整数值、整数长度、R值、接下来的一个整数、整数的长度、S值、后缀值。...签名验证:验证一个签名必须要有签名的R,S值、序列化交易、公钥。理解为:只有生成改公钥的私钥所有者,才允许在交易上产生该签名。...ECDSA签名算法想生成一对临时私钥公钥,涉及签名私钥和交易hash变换后,临时密钥用于计算R、S值。S=k-1(Hash(m)+dA*R)mod p。

    98880

    基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等

    OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。...OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。...在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。...7、Netty中的聊天加密代码示例7.1 关于NettyNetty是一个Java NIO技术的开源异步事件驱动的网络编程框架,用于快速开发可维护的高性能协议服务器和客户端,事实上Java开发IM系统时...有关Netty的介绍我就不啰嗦了,如果不了解那就详读以下几篇:《史上最强Java NIO入门:担心从入门到放弃的,请读这篇!》《Java的BIO和NIO很难懂?代码实践给你看,再不懂我转行!》

    1K20

    JWT 和 JJWT 还傻傻的分不清吗

    JWT 可以使用秘钥(secret)进行签名 (使用 HMAC 算法) 或使用 RSA 或 ECDSA 算法的公钥/私钥对(public/private key)。...当令牌(token)使用 公钥/私钥对(public/private key)进行签名的时候,只有持有私钥进行签名的一方是进行签名的。...JWT 定义了一个标准,JJWT 是 JWT 基于 Java 的一个实现。如下图,我们返回的一个 JWT。JWT 是可以解码的。JJWTJJWT 是基于 JWT 的一个实现。JJWT很容易使用和理解。...JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。...因为 JWT 的官方库不那么好用,那么JJWT 就是一个目前用得比较多的实现 JWT 的库了。如果在你的项目中需要使用 JWT,那么 JJWT 就没有什么问题。

    68360

    openssl原理与操作

    非对称加密算法 对文件或者消息加密时一个密码,而解锁时需要用另一个密码,即非对称加密,两个密钥分别叫做「公钥」、「私钥」 OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法...信息摘要算法 数据摘要算法(信息摘要)是密码学算法通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于算法具有其不可逆性,有时候也会被用做敏感信息加密。...首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。...OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。...在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。

    91430

    加密与安全_探索签名算法

    getBytes(StandardCharsets.UTF_8); // 私钥签名: Signature s = Signature.getInstance("SHA1WithRSA..."signature: %x", new BigInteger(1, signed))); // 打印签名结果 // 公钥验证: Signature v = Signature.getInstance...ECDSA的特点包括: 基于椭圆曲线:与RSA和DSA相比,ECDSA使用椭圆曲线算法来实现数字签名,这使得它能够在保持相同安全级别的情况下使用更短的密钥长度。...BouncyCastle库提供了ECDSA的完整实现,可以用于生成密钥对、签名和验证操作。利用BouncyCastle,开发者可以轻松地在Java应用程序中使用ECDSA算法进行数字签名。...这些算法结合了哈希算法(如MD5、SHA-1、SHA-256等)和非对称加密算法(如RSA、DSA、ECDSA等),用于生成和验证数字签名,以实现数据的安全传输和验证。

    10000

    Java 实现梯度下降

    来自作者投稿  作者:覃佑桦 www.baeldung.com/java-gradient-descent 1.引言 文本会学习梯度下降算法。我们将分步对算法实现过程进行说明并用Java实现。...接下来我们将采用回溯实现梯度下降。 4.分步说明 梯度下降需要一个函数和一个起点作为输入。让我们定义并绘制一个函数: ? ? 可以从任何期望的点开始。让我们从 x=1 开始: ?...这就表明算法已超过了局部最小值,因此较小的步长后退: ? 随后,只要当前y 大于前一次 y,就会减小步长并取反。迭代会一直进行直到满足所需的精度。...5.Java实现 有几种方法能够实现梯度下降。这里没有采用计算函数的导数来确定斜率的方向,因此我们的实现也适用于不可微函数。...还用Java对算法进行了实现,完整源代码可以从 GitHub 下载。

    1.5K10

    Java实现Redis限流

    Java实现Redis限流 1、概述 2、zset有序集合相关命令与限流 3、zset有序结合与限流 1、概述   限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时...3、zset有序结合与限流 有关redis启动的知识不做过多介绍了,这里我docker创建的redis容器。...本例实现100秒内只能处理3个请求 LimitRequest.java package com.baizhi.request; import redis.clients.jedis.Jedis;...currentTime作为值,以保证值的唯一性,同时currentTime作为有序集合里元素的score值。   ...其中,zcard命令统计有序集合内键为requestType的个数,如果通过if语句发现当前个数还没有达到限流的上限,则允许该请求方法,否则不允许。

    94110
    领券