Coder Social home page Coder Social logo

Comments (20)

deatil avatar deatil commented on June 16, 2024 1

GMTestKit.exe 加密的数据是c1c2c3字节拼接的,没有加前缀。根据标准是需要有前缀的
gmssl加密后的数据是用的asn1编码的,需要转换才能互通
可以看下这个测试逻辑 test

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024 1

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

可以看一下这个函数sm2_ciphertext_from_der

已经解决了,最后发现DER数据里面包含了长度数据其实数据构成是asn1(长度+C1.x+C1.y+C3+C2),被这个长度整惨了....后来我这边直接C1.x+C1.y+C3+C2=C1+C3+C2就好了

from gmssl.

zzl360 avatar zzl360 commented on June 16, 2024

国密局标准是C1C3C2的顺序

from gmssl.

zhangzhigang12345 avatar zhangzhigang12345 commented on June 16, 2024

@zzl360 那为什么用GMSSL 3.1.1的原生代码(按照C1 C3 C2顺序)在https://the-x.cn/cryptography/Sm2.aspx (下拉选C1+C3+C2、 SM3) 解密,报”无效密文或密钥错误,C1 Invalid“,这个是啥原因?
没有修改过的GMSSL3.1.1就是国密局标准C1C3C2顺序的,为什么https://the-x.cn/cryptography/Sm2.aspx上面解不了密?谢谢

from gmssl.

lpilp avatar lpilp commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

from gmssl.

zzl360 avatar zzl360 commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

可以看一下这个函数sm2_ciphertext_from_der

from gmssl.

lpilp avatar lpilp commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

可以看一下这个函数sm2_ciphertext_from_der

已经解决了,最后发现DER数据里面包含了长度数据其实数据构成是asn1(长度+C1.x+C1.y+C3+C2),被这个长度整惨了....后来我这边直接C1.x+C1.y+C3+C2=C1+C3+C2就好了

不能直接这么弄呢,得用函数解出来,c1x,c1y是大int型,有小概率大小不一致,可能补了0或是去了0,得注意,c1c3c2里c1的长度是hex的话是128字节,有些前面有04就是130字节,asn1后的c1x,c1y 的hex可能就不是都是64字节,得用你所用的asn1函数去decode解开, 并将c1x,c1y补齐为hex的64字节长度,

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

可以看一下这个函数sm2_ciphertext_from_der

已经解决了,最后发现DER数据里面包含了长度数据其实数据构成是asn1(长度+C1.x+C1.y+C3+C2),被这个长度整惨了....后来我这边直接C1.x+C1.y+C3+C2=C1+C3+C2就好了

不能直接这么弄呢,得用函数解出来,c1x,c1y是大int型,有小概率大小不一致,可能补了0或是去了0,得注意,c1c3c2里c1的长度是hex的话是128字节,有些前面有04就是130字节,asn1后的c1x,c1y 的hex可能就不是都是64字节,得用你所用的asn1函数去decode解开, 并将c1x,c1y补齐为hex的64字节长度,

我在asn1之前提取的数据,我这边考虑后续就不转ASN1了,直接把这几块内存复制一下。您帮忙看一下方案可行吗? 这些长度问题的解决有相关代码参考吗?主要是很多第三方工具不用ASN1,那非ASN1数据怎么组装和解析呢?

image

from gmssl.

lpilp avatar lpilp commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?比如您看这个网站他加密后的数据就没用ASN1编码?您的意思的解码ANS1,我的想法是就不用ANS1编码推进后续动作。您觉得可行吗?
https://the-x.cn/cryptography/Sm2.aspx

from gmssl.

deatil avatar deatil commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

您说的前缀是指长度吗?我看源码就是在一开始把长度编码进去了。

from gmssl.

deatil avatar deatil commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

您说的前缀是指长度吗?我看源码就是在一开始把长度编码进去了。

不是长度,是未压缩的前缀,通常以数字4作为前缀。对接java的bc库就不用加前缀

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

您说的前缀是指长度吗?我看源码就是在一开始把长度编码进去了。

不是长度,是未压缩的前缀,通常以数字4作为前缀。对接java的bc库就不用加前缀
GMSSL没有弄前缀啊?
image

from gmssl.

deatil avatar deatil commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

您说的前缀是指长度吗?我看源码就是在一开始把长度编码进去了。

不是长度,是未压缩的前缀,通常以数字4作为前缀。对接java的bc库就不用加前缀
GMSSL没有弄前缀啊?
image

asn1 没有前缀,字节拼接的有。给你说的一直是字节拼接

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

这种固定长度的截了不行呢, 按 zzl360 说的那个 sm2_ciphertext_from_der 来 解析, 还有可以去asn1的编码方式,就会了解为什么不行了

您看我的实现是在ASN1调用之前截取的内存数据,此时数据还没有进行ANS1编码。后续的解密我们全部不让ASN1参与可以吗?

直接把c1c3c2的字节组合起来没有问题的,对接java的bc库的话是没问题,其他语言的话以标准编码需要添加前缀

您说的前缀是指长度吗?我看源码就是在一开始把长度编码进去了。

不是长度,是未压缩的前缀,通常以数字4作为前缀。对接java的bc库就不用加前缀
GMSSL没有弄前缀啊?
image

asn1 没有前缀,字节拼接的有。给你说的一直是字节拼接
前缀里面放什么数据?这块有标准吗?不好意思我在多麻烦您一下,C1长度固定32,C3长度32,C2长度不定。那通过总长度-C1长度-C3长度=C2长度。前缀要弄啥?

from gmssl.

zzl360 avatar zzl360 commented on June 16, 2024

是的,参考http://www.gmbz.org.cn/main/viewfile/2018011001400692565.html ,GM/0009-2012 SM2 密码算法使用规范。
image

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

是的,参考http://www.gmbz.org.cn/main/viewfile/2018011001400692565.html ,GM/0009-2012 SM2 密码算法使用规范。 image

我以为GM这块大家都统一了,没想到....感谢提醒。

from gmssl.

ChuLiqiang avatar ChuLiqiang commented on June 16, 2024

gmssl生成的是 asn1(c1x,c1y,c3,c2), 要互相验证得进行格式转换

麻烦请问一下具体 怎么进行转换呢?有相关代码参考吗?c1x和c1y怎么转换成C1? asn1数据解码后转换?

可以看一下这个函数sm2_ciphertext_from_der

已经解决了,最后发现DER数据里面包含了长度数据其实数据构成是asn1(长度+C1.x+C1.y+C3+C2),被这个长度整惨了....后来我这边直接C1.x+C1.y+C3+C2=C1+C3+C2就好了

不能直接这么弄呢,得用函数解出来,c1x,c1y是大int型,有小概率大小不一致,可能补了0或是去了0,得注意,c1c3c2里c1的长度是hex的话是128字节,有些前面有04就是130字节,asn1后的c1x,c1y 的hex可能就不是都是64字节,得用你所用的asn1函数去decode解开, 并将c1x,c1y补齐为hex的64字节长度,

我刚刚去看了DER编码我明白你说的了,c1x和c1y DER编码然后在解密后长度不一定是64字节。如果长度不是64字节需要咱们自己补齐。另外DER编码一开是编码的时候算长度是为了把4个参数编码成结构体类型。多谢。

from gmssl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.