luckykellan / dart_sm Goto Github PK
View Code? Open in Web Editor NEW基于Dart语言实现的国密SM2、SM3、SM4算法。
License: Apache License 2.0
基于Dart语言实现的国密SM2、SM3、SM4算法。
License: Apache License 2.0
数据:{"appFlag":"true","currentPage":1,"pageSize":10,"productName":null,"riskClassCode":"全部"}
dart sm3结果:105513af9332bcf2cce70322ccbc24ab49c62b7e46f810487304e26a4102b9b5
java(hutool) sm3结果:752a357baa8645f07233103acf7e4333ae380225ec9287140a9b5697afc545d6
如果数据改为: {"appFlag":"true","currentPage":1,"pageSize":10,"productName":null,"riskClassCode":"06"} ,则完全匹配
代码如下:
var sortString = "appId=19E179E5DC29C05E65B90CDE57A1C7E5&code=0&data={"accessToken":"!TgbtrMd3RFP_mk8P-qJG985Mjn_9suebPrBPfdyQZM08tqXOqaoq17e6mXqw2w9TKuj-sSvmGpGIih7jzH3FZPXmXDRkwN3SvwxpabD-Bi8TrYy6y_682iI0qtyKUh5PnK0Qw-ZEG3vQjgh0s9SA6zs5F0iWcocpg0NwNiRLKnNvg4geZHg9dMaymZUd8r8he7F51URXrHEORjkbUdwopusw==","certDateFlag":"1","certifyType":"0","isNeedFace":"0","isTrustDev":"1","pwdFlag":"0","refreshToken":"59b50736b38c4331ab8ef3414ea09d2e","secureToken":"aZIFOGqGe/SMPL3bhmvM/C6KbCaxi/pyE/juCpYsRJcgdkF6IMCiCjY7U+SBKMiQCo3Ti7xWwYRZloTE44djUGt+WvBTCcRmi4HoJ1Tb2xuiNFvTNo5nGx1BPBMFpN7JzUzRKBkXORWtUgxCqwjyuzq58SA4o09QvjHrWYp+qM1VWgMkKc53nzALYMI0bS42dvwflEuJbXm5UdANFs/rsc2LrmHqYHH+X46pCcyvC3nea9PPTMxOBT87CScZOmj6eC7Gkjwkeg2a2LSlV2IknWJEYCXeQnNsDsdD2jMbWl9npjDoGgwZlZmsR6OGijqVI3uA9uQBpuIRwbe0MfkJTA=="}&encType=SM4&message=成功&signType=SM2×tamp=1716195185&type=success&key=D91CEB11EE62219CD91CEB11EE62219C";
var signData = "0d63e83510a7e1df0bb0d5708fc25091d1c8f5e4f3e60d08ad8222ab1121f0f9ffa31768f46b21fddad7d3b141971d26c04c39a4376aecfc79a64cabc97811ad";
var pubkey = "d74188eeb242f52e58da294017c4fb9dc7c8edab0224241d236e037196f77946ce2e4490c46957093c7a59209b58fa40f9076ccc6fef7d5c27ba499b3ab3ec2d";
if (SM2.verifySignature(sortString, signData, pubkey,
hash: true, userId: "1234567812345678")) {
print("YES");
} else {
print("NO");
}
你好,flutter web项目,调用SM3.hash(data);报错“Unsupported operation: Uint64 accessor not supported by dart2js.”
When the exception was thrown, this was the stack:
dart-sdk/lib/internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:49 throw
dart-sdk/lib/_internal/js_dev_runtime/private/native_typed_data.dart 646:5 setUint64]
packages/dart_sm/src/sm3.dart 17:15 hashBytesToBytes
packages/dart_sm/src/sm3.dart 108:37 hash
请问怎么解决?
sm4和js版本的加密结果不一致, 导致后端解密不通用, 是哪里有问题吗?
js版本
let key = '7d5a493364f2f4250cb7963a17ee081f'
// 加密
let encData = SM4.encrypt('123456', key, {
mode: SM4.constants.ECB,
inputEncoding: 'utf8',
outputEncoding: 'base64'
})
console.log(encData) // biOgHi0QdDILAvpxPf8r1w==
dart
sm4Key = '7d5a493364f2f4250cb7963a17ee081f';
String encodeString = SM4.encrypt('123456', key: sm4Key);
String encData = base64Encode(utf8.encode(encodeString));
KeyPair keypair = SM2.generateKeyPair();
String privateKey = keypair.privateKey; // 私钥
String publicKey = keypair.publicKey; // 公钥
String cipherText = SM2.encrypt('我是中文', publicKey);
String plainText = SM2.decrypt(cipherText, privateKey);
print(plainText); // 打印结果为:b�f/N-e
请大佬有空帮忙看看。
用该库生成的publicKey和privateKey,publickKey交给服务端,服务端经过tutool库进行SM2加密后(均采用C1C3C2模式)得到的密文,用该库进行SM2解密,无法解密。
KeyPair 没有export,请大佬抽空添加一下。
const data = '12345';
final keypair = SM2.generateKeyPair();
String privateKey = keypair.privateKey; // 私钥
String publicKey = keypair.publicKey; // 公钥
test('加密和解密', (){
String encryptData = SM2.encrypt(data, publicKey, cipherMode: C1C2C3);
String decryptData = SM2.decrypt(encryptData, privateKey);
expect(decryptData, data);
});
Expected: '12345'
Actual: ''
Which: is different. Both strings start the same, but the actual value is missing the following trailing characters: 12345
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.