國密算法是國家密碼局制定標(biāo)準(zhǔn)的一系列算法,主要有SM1,SM2,SM3,SM4,密鑰長度和分組長度均為128位。其中:
sm-crypto可以在微信小程序中實(shí)現(xiàn)SM2、SM3、SM4國密算法。 使用安裝 sm-crypto 從小程序基礎(chǔ)庫版本 2.2.1 或以上、及開發(fā)者工具 1.02.1808300 或以上開始,小程序支持使用 npm 安裝第三方包。 npm install --save miniprogram-sm-crypto sm2獲取密鑰對(duì) 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é)果 簽名驗(yàn)簽 const sm2 = require('miniprogram-sm-crypto').sm2; // 純簽名 + 生成橢圓曲線點(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()], // 傳入事先已生成好的橢圓曲線點(diǎn),可加快簽名速度 }); // 簽名 let verifyResult2 = sm2.doVerifySignature(msg, sigValueHex2, publicKey); // 驗(yàn)簽結(jié)果 // 純簽名 + 生成橢圓曲線點(diǎn) + der編解碼 let sigValueHex3 = sm2.doSignature(msg, privateKey, { der: true, }); // 簽名 let verifyResult3 = sm2.doVerifySignature(msg, sigValueHex3, publicKey, { der: true, }); // 驗(yàn)簽結(jié)果 // 純簽名 + 生成橢圓曲線點(diǎn) + sm3雜湊 let sigValueHex4 = sm2.doSignature(msg, privateKey, { hash: true, }); // 簽名 let verifyResult4 = sm2.doVerifySignature(msg, sigValueHex4, publicKey, { hash: true, }); // 驗(yàn)簽結(jié)果 // 純簽名 + 生成橢圓曲線點(diǎn) + sm3雜湊(不做公鑰推導(dǎo)) let sigValueHex5 = sm2.doSignature(msg, privateKey, { hash: true, publicKey, // 傳入公鑰的話,可以去掉sm3雜湊中推導(dǎo)公鑰的過程,速度會(huì)比純簽名 + 生成橢圓曲線點(diǎn) + sm3雜湊快 }); let verifyResult5 = sm2.doVerifySignature(msg, sigValueHex5, publicKey, { hash: true, publicKey, }); 獲取橢圓曲線點(diǎn) const sm2 = require('miniprogram-sm-crypto').sm2; let poin = sm2.getPoint(); // 獲取一個(gè)橢圓曲線點(diǎn),可在sm2簽名時(shí)傳入 sm3const sm3 = require('miniprogram-sm-crypto').sm3; let hashData = sm3('abc'); // 雜湊 sm4加密 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, 0 |
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)