W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
小程序 js 庫(kù)。國(guó)密算法 sm2、sm3 和 sm4 的實(shí)現(xiàn)。
使用此組件需要依賴(lài)小程序基礎(chǔ)庫(kù) 2.2.1 以上版本,同時(shí)依賴(lài)開(kāi)發(fā)者工具的 npm 構(gòu)建。具體詳情可查閱官方 npm 文檔。
npm install --save miniprogram-sm-crypto
const sm2 = require('miniprogram-sm-crypto').sm2;
let keypair = sm2.generateKeyPairHex();
publicKey = keypair.publicKey; // 公鑰
privateKey = keypair.privateKey; // 私鑰
const sm2 = require('miniprogram-sm-crypto').sm2;
const cipherMode = 1; // 1 - C1C3C2,0 - C1C2C3,默認(rèn)為1
let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode); // 加密結(jié)果
let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode); // 解密結(jié)果
ps:理論上來(lái)說(shuō),只做純簽名是最快的。
const sm2 = require('miniprogram-sm-crypto').sm2;
// 純簽名 + 生成橢圓曲線(xiàn)點(diǎn)
let sigValueHex = sm2.doSignature(msg, privateKey); // 簽名
let verifyResult = sm2.doVerifySignature(msg, sigValueHex, publicKey); // 驗(yàn)簽結(jié)果
// 純簽名
let sigValueHex2 = sm2.doSignature(msg, privateKey, {
pointPool: [sm2.getPoint(), sm2.getPoint(), sm2.getPoint(), sm2.getPoint()], // 傳入事先已生成好的橢圓曲線(xiàn)點(diǎn),可加快簽名速度
}); // 簽名
let verifyResult2 = sm2.doVerifySignature(msg, sigValueHex2, publicKey); // 驗(yàn)簽結(jié)果
// 純簽名 + 生成橢圓曲線(xiàn)點(diǎn) + der編解碼
let sigValueHex3 = sm2.doSignature(msg, privateKey, {
der: true,
}); // 簽名
let verifyResult3 = sm2.doVerifySignature(msg, sigValueHex3, publicKey, {
der: true,
}); // 驗(yàn)簽結(jié)果
// 純簽名 + 生成橢圓曲線(xiàn)點(diǎn) + sm3雜湊
let sigValueHex4 = sm2.doSignature(msg, privateKey, {
hash: true,
}); // 簽名
let verifyResult4 = sm2.doVerifySignature(msg, sigValueHex4, publicKey, {
hash: true,
}); // 驗(yàn)簽結(jié)果
// 純簽名 + 生成橢圓曲線(xiàn)點(diǎn) + sm3雜湊(不做公鑰推導(dǎo))
let sigValueHex5 = sm2.doSignature(msg, privateKey, {
hash: true,
publicKey, // 傳入公鑰的話(huà),可以去掉sm3雜湊中推導(dǎo)公鑰的過(guò)程,速度會(huì)比純簽名 + 生成橢圓曲線(xiàn)點(diǎn) + sm3雜湊快
});
let verifyResult5 = sm2.doVerifySignature(msg, sigValueHex5, publicKey, {
hash: true,
publicKey,
});
const sm2 = require('miniprogram-sm-crypto').sm2;
let poin = sm2.getPoint(); // 獲取一個(gè)橢圓曲線(xiàn)點(diǎn),可在sm2簽名時(shí)傳入
const sm3 = require('miniprogram-sm-crypto').sm3;
let hashData = sm3('abc'); // 雜湊
const sm4 = require('miniprogram-sm-crypto').sm4;
const key = [0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10];
let encryptData = sm4.encrypt([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10], key); // 加密
const sm4 = require('miniprogram-sm-crypto').sm4;
const key = [0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10];
let decryptData = sm4.decrypt([0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e, 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46],
國(guó)密算法實(shí)現(xiàn)實(shí)例:詳情
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: