Code Monkey home page Code Monkey logo

Comments (5)

entrehuihui avatar entrehuihui commented on July 17, 2024

补充,这是我使用的加密解密网址。使用该库SM4加密与网上得到的密文不一致。 https://i.goto327.top/CryptTools/SymmCrypt.aspx

from gm.

tkblack avatar tkblack commented on July 17, 2024

借楼提几个问题,
第一个:sm2加解密一般三段,C1(公钥)、C2(密文)、C3(哈希),但是这个代码特立独行,后面又拼接个C4,至于用处嘛,个人感觉没啥意义,而进一步导致的问题就是和其他语言(或者go语言的其他)的实现无法兼容,首先长度就不一致;
第二个:kdf使用的buffsize竟然是16,我是无语的,其他的都是32,作者直接用了sm3.Blocksize() == 16,因为作者使用32位长度的类型,这里Blocksize建议返回64(字节长度);虽然用16对sm3计算结果不会有影响,但是kdf时又用这个值就会导致存在问题,所以,即使去掉前面的C4部分也不会和其他实现兼容,还要将这里的16改成32。
题外,这些问题是在使用才发现的,项目中想替换同济的gmsm,发现比这个规范,至于sm4的兼容问题,我还没有具体看。

from gm.

ZZMarquis avatar ZZMarquis commented on July 17, 2024

@tkblack
你好,感谢你提出问题。希望你有时间帮忙指出具体存在问题的部分:
第一个:请问你说的C4是指哪里呢,是指第一个字节的压缩标识吗?这份代码里sm2密文的C3后面没有再拼数据了。
第二个:这个份代码中kdf中的bufSize是等于digest.Size()的,而digest.Size()等于sm3.DigestLength,sm3.DigestLength是等于32的。

希望你有时间的话,可以把存在问题的代码部分截取出来说一下,会更具象一点。

from gm.

ZZMarquis avatar ZZMarquis commented on July 17, 2024

@entrehuihui
我用这个网站试了一下SM4 CBC加密,结果跟我测试代码里TestSm4Cipher_Encrypt这个测试方法输出是一致的:
算法: SM4 加密
密钥 长度16(0x10)字节
7B EA 0A A5 45 8E D1 A3 7D B1 65 2E FB C5 95 05
数据 长度16(0x10)字节
01 02 03 04 05 06 07 08 08 08 08 08 08 08 08 08
初始向量 长度16(0x10)字节
70 B6 E0 8D 46 EE 82 24 45 60 0B 25 C4 71 FA BA
CBC模式 密文 长度16(0x10)字节
CA 55 C5 15 0B F7 F4 6F C9 89 2A CE 49 78 93 03

测试代码里TestSm4Cipher_Encrypt会有一行输出:
encrypt result:ca55c5150bf7f46fc9892ace49789303

需要注意的是:这份代码里的SM4是按照golang标准库的接口来实现的,按照golang标准库的接口实现,需要自己加padding,可以参考测试代码。而golang标准库没有提供ECB的接口,所以这份代码目前暂未实现ECB模式。

这份代码里的加解密都是跟Java的BC库加解密做过互通测试的。

from gm.

tkblack avatar tkblack commented on July 17, 2024

不好意思,没注意看,最新的版本确实都没有这几个问题了,不知道朋友拿的哪个版本,还或者是他自己改过,sm4我试过,和java的bc库是不能兼容的,但我觉得这个sm4没啥问题。朋友后面在网上找了一个java源码的sm4,然后和这个调通用着了。

from gm.

Related Issues (17)

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.