在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

harmony-utils之SM2,SM2加解密

童長老 ? 來源:jf_14594073 ? 作者:jf_14594073 ? 2025-06-30 16:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

harmony-utils之SM2,SM2加解密

harmony-utils 簡介與說明


[harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、線程間通信、彈框、吐司、生物認證、用戶首選項、拍照、相冊、掃碼、文件、日志,異常捕獲、字符、字符串、數字、集合、日期、隨機、base64、加密、解密、JSON等一系列的功能和操作,能夠滿足各種不同的開發需求。
[picker_utils] 是harmony-utils拆分出來的一個子庫,包含PickerUtil、PhotoHelper、ScanUtil。

下載安裝
ohpm i @pura/harmony-utils
ohpm i @pura/picker_utils

//全局初始化方法,在UIAbility的onCreate方法中初始化 AppUtil.init()
 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
   AppUtil.init(this.context);
 }

SM2 算法簡介


SM2是由中國國家密碼管理局于2010年發布的橢圓曲線公鑰密碼算法,屬于我國商用密碼體系的核心組成部分。該算法基于橢圓曲線密碼學(ECC),采用256位密鑰長度,在安全性上等同RSA-3072,但具有更高的運算效率和更低的計算資源消耗。
作為非對稱算法,SM2支持?數字簽名?、?密鑰交換?和?公鑰加密?三大功能,其安全性依賴于橢圓曲線離散對數問題的難解性,可抵御暴力破解和量子計算威脅。相較于RSA算法,SM2在相同安全強度下密鑰更短、簽名速度更快,已廣泛應用于金融支付、電子認證、政務系統及物聯網安全等領域,并成為國際標準ISO/IEC 14888-3的組成部分。

SM2 應用場景


SM2 算法在我國的金融、政務、電力等關鍵領域有著廣泛的應用。例如,在金融領域的網上銀行、電子支付等場景中,用于保障用戶身份認證、交易數據的安全傳輸和完整性保護;在政務領域的電子公文傳輸、政務系統登錄等方面,確保政務信息的安全和可靠。
在實際應用中,SM2 算法通常會與 SM3、SM4 等國密算法配合使用。一般用 SM4 對數據內容進行加密,使用 SM3 對內容進行摘要,再使用 SM2 對摘要進行簽名。接收端先用 SM2 對摘要進行驗簽,驗簽成功后,對發送過來的內容進行 SM3 摘要,查看生成的摘要和驗簽后的摘要是否一致,以防止篡改。

API方法與使用


generateKeyPair 生成非對稱密鑰KeyPair
let keyPair = SM2.generateKeyPairSync();
let pubKey = keyPair.pubKey; //公鑰
let priKey = keyPair.priKey; //私鑰
let pubKeyStr = CryptoHelper.dataBlobToStr(pubKey.getEncoded(), 'base64'); //將公鑰轉換成base64字符串。
LogUtil.error(`pubKeyStr2: ${pubKeyStr}`);
let priKeyStr = CryptoHelper.dataBlobToStr(priKey.getEncoded(), 'base64'); //將私鑰轉換成base64符符串。
LogUtil.error(`priKeyStr2: ${priKeyStr}`);
getConvertKeyPair 獲取轉換的非對稱密鑰KeyPair
let pubKeyStr = "3059301306072a8648ce3d020106082a811ccf5501822d034200045417bebc296d14ebed6b6d0298019935677c5a8549150adf82e5c51f567066a7e8186915b10d3a8f0c544b2c03ee39ff3063125b53b906cc4da2232ae127c178"; //16進制字符串密鑰
let priKeyStr = "3031020101042035ae8b8faec0e80e64b26d5239d60c7a694aaa84bd106ed12f4600d9fe2cbd09a00a06082a811ccf5501822d"; //16進制字符串密鑰
let keyPair = await SM2.getConvertKeyPair(pubKeyStr, priKeyStr, 'hex');
let pubKey = keyPair.pubKey; //公鑰
let priKey = keyPair.priKey; //私鑰
let pubKeyStr3 = CryptoHelper.dataBlobToStr(pubKey.getEncoded(), 'hex'); //將公鑰轉換成16進制字符串。
LogUtil.error(`pubKeyStr3: ${pubKeyStr3}`);
let priKeyStr3 = CryptoHelper.dataBlobToStr(priKey.getEncoded(), 'hex'); //將私鑰轉換成16進制字符串。
LogUtil.error(`priKeyStr3: ${priKeyStr3}`);
getSM2PubKey 獲取轉換SM2公鑰, 將C1C2C3格式的SM2公鑰轉換為鴻蒙所需的ASN.1格式
//16進制的C1C2C3格式的SM2公鑰
let pubKeyStr = "04FB40A51A9D6E9333A73B3633BA72B0989BD69F54420108E7036C8FA0E6C6142C422F70D75063AC98EC9E2D2CB82B847C51979A1485DAB5573ABCC0FC69B5988E";
let pubKey = SM2.getSM2PubKey(pubKeyStr); //將16進制的C1C2C3格式的SM2公鑰轉換為鴻蒙所需的ASN.1格式公鑰
let pubKeyStr1 = CryptoHelper.dataBlobToStr(pubKey.getEncoded(), 'hex'); //將公鑰轉換成16進制字符串。
LogUtil.error(`轉換后的公鑰: ${pubKeyStr1}`);
getSM2PriKey 獲取轉換SM2私鑰
let priKeyStr="6330B599ECD23ABDC74B9A5B7B5E00E553005F72743101C5FAB83AEB579B7074";
let priKey = SM2.getSM2PriKey(priKeyStr);
let priKeyStr1 = CryptoHelper.dataBlobToStr(priKey.getEncoded(), 'hex'); //將私鑰轉換成base64符符串。
LogUtil.error(`轉換后的私鑰: ${priKeyStr1}`);
encrypt 加密
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let msg = "鴻蒙技術交流QQ群:1029219059"; //待加密字符串
let msgDataBlob = CryptoHelper.strToDataBlob(msg, 'utf-8');
let encryptDataBlob = await SM2.encrypt(msgDataBlob, keyPair!.pubKey); //加密
let encryptStr = CryptoHelper.dataBlobToStr(encryptDataBlob, 'utf-8');
LogUtil.error(`加密后: ${encryptStr}`);
decrypt 解密
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let msg = "鴻蒙技術交流QQ群:1029219059"; //待加密字符串
let msgDataBlob = CryptoHelper.strToDataBlob(msg, 'utf-8');
let encryptDataBlob = await SM2.encrypt(msgDataBlob, keyPair!.pubKey); //加密
let decryptDataBlob = await SM2.decrypt(encryptDataBlob, keyPair!.priKey); //解密
let decryptStr = CryptoHelper.dataBlobToStr(decryptDataBlob, 'utf-8');
LogUtil.error(`加解密后: ${decryptStr}`);
getCipherTextSpec 獲取轉換SM2密文格式,ASN.1格式轉換為C1C2C3或C1C3C2
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let msg = "鴻蒙技術交流QQ群:1029219059"; //待加密字符串
let msgDataBlob = CryptoHelper.strToDataBlob(msg, 'utf-8');
let encryptDataBlob = SM2.encryptSync(msgDataBlob, keyPair!.pubKey); //加密
let c1c2c3Str = SM2.getCipherTextSpec(encryptDataBlob, 0); //轉換密文
LogUtil.error(`C1C2C3密文: ${c1c2c3Str}`);
let c1c3c2Str = SM2.getCipherTextSpec(encryptDataBlob, 1); //轉換密文
LogUtil.error(`C1C3C2密文: ${c1c3c2Str}`);
sign 對數據進行簽名
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let msg = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
let dataBlob = CryptoHelper.strToDataBlob(msg, 'utf-8');
let signDataBlob =await SM2.sign(dataBlob, keyPair!.priKey);
let signStr = CryptoHelper.dataBlobToStr(signDataBlob, 'hex');
LogUtil.error(`簽名,異步: ${signStr}`);
verify 對數據進行驗簽
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let msg = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
let dataBlob = CryptoHelper.strToDataBlob(msg, 'utf-8');
let signDataBlob =await SM2.sign(dataBlob, keyPair!.priKey);

let verify = await SM2.verify(dataBlob, signDataBlob, keyPair!.pubKey);
LogUtil.error(`驗簽,異步: ${verify}`);
signSegment 對數據進行分段簽名
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let dataStr = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(dataStr, 'utf-8');
let signDataBlob = await SM2.signSegment(data, keyPair!.priKey);
let signStr = CryptoHelper.dataBlobToStr(signDataBlob, 'base64');
LogUtil.error(`分段簽名,異步: ${signStr}`);
verifySegment 對數據進行分段驗簽
let pubKeyStr = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYIZ4YCxXfIKvy3Fzmpl43hk7ojUsZqoZyww1YYtw4bICcaD/KmKy+OO4bMTnbrjbjNfJQaVApDTOW9a+PvazXQ=="; //base64字符串公鑰
let priKeyStr = "MDECAQEEIKu8PGHEU4Wxiw6xwb0loj0NVLlR7vGe5jYgan8u+hKboAoGCCqBHM9VAYIt"; //base64字符串私鑰
let keyPair = SM2.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');

let dataStr = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(dataStr, 'utf-8');
let signDataBlob = await SM2.signSegment(data, keyPair!.priKey);

let verify = await SM2.verifySegment(data, signDataBlob, keyPair!.pubKey);
LogUtil.error(`分段驗簽,異步: ${verify}`);

創作不易,請給童長老點贊

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SM2
    SM2
    +關注

    關注

    0

    文章

    3

    瀏覽量

    2450
  • Harmony
    +關注

    關注

    0

    文章

    75

    瀏覽量

    2970
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    harmony-utilsToastUtil,吐司工具類

    harmony-utilsToastUtil,吐司工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借
    的頭像 發表于 06-30 17:35 ?62次閱讀

    harmony-utilsTypeUtil,類型檢查工具類

    harmony-utilsTypeUtil,類型檢查工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,
    的頭像 發表于 06-30 17:35 ?59次閱讀

    harmony-utilsWantUtil,Want工具類

    harmony-utilsWantUtil,Want工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,
    的頭像 發表于 06-30 17:34 ?64次閱讀

    harmony-utilsWindowUtil,窗口相關工具類

    harmony-utilsWindowUtil,窗口相關工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具
    的頭像 發表于 06-30 17:33 ?66次閱讀

    harmony-utilsAES,AES加解密

    harmony-utilsAES,AES加解密 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易
    的頭像 發表于 06-30 17:30 ?70次閱讀

    harmony-utilsDES,DES加解密

    harmony-utilsDES,DES加解密 harmony-utils 簡介與說明 [harmony-utils]一款功能豐富且極易上
    的頭像 發表于 06-30 17:16 ?67次閱讀

    harmony-utilsRSA,RSA加解密

    harmony-utilsRSA,RSA加解密 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易
    的頭像 發表于 06-30 16:52 ?60次閱讀

    harmony-utilsSHA,SHA工具類

    harmony-utilsSHA,SHA工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用
    的頭像 發表于 06-30 16:51 ?63次閱讀

    harmony-utilsMD5,MD5工具類

    harmony-utilsMD5,MD5工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用
    的頭像 發表于 06-30 16:49 ?61次閱讀

    harmony-utilsSM3,SM3工具類

    harmony-utilsSM3,SM3工具類 harmony-utils 簡介與說明 harmony
    的頭像 發表于 06-28 18:37 ?96次閱讀

    harmony-utilsSM4,SM4加解密

    harmony-utilsSM4,SM4加解密 harmony-utils 簡介與說明
    的頭像 發表于 06-28 18:36 ?83次閱讀

    harmony-utilsPickerUtil,拍照、文件選擇和保存,工具類

    harmony-utilsPickerUtil,拍照、文件選擇和保存,工具類 harmony-utils 簡介與說明 harmony-utils 一款功能豐富且極易上手的Harmon
    的頭像 發表于 06-27 16:03 ?86次閱讀

    harmony-utilsAuthUtil,生物認證相關工具類

    # harmony-utilsAuthUtil,生物認證相關工具類 ## harmony-utils 簡介與說明 ------[harmony-utils]( https
    的頭像 發表于 06-26 17:43 ?81次閱讀

    harmony-utilsAssetUtil,關鍵資產存儲服務工具類

    harmony-utilsAssetUtil,關鍵資產存儲服務工具類
    的頭像 發表于 06-26 17:42 ?77次閱讀

    harmony-utilsArrayUtil,集合工具類

    # harmony-utilsArrayUtil,集合工具類 ## harmony-utils 簡介與說明 ------[harmony-utils]( https
    的頭像 發表于 06-26 17:38 ?82次閱讀
    主站蜘蛛池模板: 四虎影院永久 | 韩国一级网站 | 中文字幕1区 | 韩国三级理论在线看中文字幕 | 成人性生活免费视频 | 在线观看视频播放 | 好男人www社区影视在线 | 美女视频永久黄网站在线观看 | 性色欧美xo影院 | 欧美宗合网 | 黄色美女免费网站 | 午夜亚洲福利 | 欧美图片小说视频 | 国产亚洲一区二区精品 | 成年人电影黄色 | 韩国黄色三级视频 | 天天操国产 | 天天曰夜夜操 | 久久99国产亚洲高清观看首页 | 日本不卡在线一区二区三区视频 | 国产成 人 综合 亚洲网 | 亚洲国产成人久久一区久久 | ak福利午夜在线观看 | 亚洲 午夜在线一区 | 另类视频色综合 | 亚洲色图日韩精品 | 天天射天天干天天舔 | 天堂中文在线资源库用 | 欧美性淫爽www视频播放 | 国产三级精品播放 | 日本精品视频一视频高清 | 欧美成人三级伦在线观看 | 香蕉操 | 国内91视频 | 综合亚洲一区二区三区 | 日本黄色网页 | 一本大道高清在线视频 视频 | 日本黄在线观看 | 夜夜爽天天狠狠九月婷婷 | 99热久 | 在线看av网址|