Comments (5)
补充,这是我使用的加密解密网址。使用该库SM4加密与网上得到的密文不一致。 https://i.goto327.top/CryptTools/SymmCrypt.aspx
from gm.
借楼提几个问题,
第一个: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.
@tkblack
你好,感谢你提出问题。希望你有时间帮忙指出具体存在问题的部分:
第一个:请问你说的C4是指哪里呢,是指第一个字节的压缩标识吗?这份代码里sm2密文的C3后面没有再拼数据了。
第二个:这个份代码中kdf中的bufSize是等于digest.Size()的,而digest.Size()等于sm3.DigestLength,sm3.DigestLength是等于32的。
希望你有时间的话,可以把存在问题的代码部分截取出来说一下,会更具象一点。
from gm.
@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.
不好意思,没注意看,最新的版本确实都没有这几个问题了,不知道朋友拿的哪个版本,还或者是他自己改过,sm4我试过,和java的bc库是不能兼容的,但我觉得这个sm4没啥问题。朋友后面在网上找了一个java源码的sm4,然后和这个调通用着了。
from gm.
Related Issues (17)
- 函数notEncrypted中的bug HOT 1
- x509转成publice key HOT 1
- sm2 Decrypt HOT 1
- 问题 关于公钥的 X, Y 如何生成 pem文件的字符串 HOT 3
- sm2签名在gmssl服务端验证失败 HOT 2
- 建议 HOT 1
- 针对sm2.Verify的cpu性能问题,有提升方案吗 HOT 3
- 能否加一个zeroPadding,不知道咋写 HOT 3
- Public key raw bytes length must be 64 HOT 7
- 仿造招行Java的Sm2SignWithSm3,实现的签名方法报错,请教大佬 HOT 7
- 为什么会出现 data[0] != 4 这个问题 HOT 1
- sign/verify结果输出问题 HOT 1
- sm2验签偶发性失败 HOT 8
- Java端SM2加密,golang无法解密,golang端SM2加密,java无法解密 HOT 1
- sigtopub HOT 6
- sm2进行加解密时,建议对公钥的X和Y的[]byte类型进行填充 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gm.