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

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

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

3天內不再提示

harmony-utils之SM4,SM4加解密

童長老 ? 2025-06-28 18:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

harmony-utils之SM4,SM4加解密

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);
 }

SM4 算法簡介


SM4是中國自主研發的商用對稱加密算法,由國家密碼管理局于2006年發布,2012年成為國家密碼行業標準(GM/T 0002-2012)。該算法采用128位分組長度和128位密鑰長度,通過32輪非線性迭代結構實現數據加密,安全強度與AES-128相當。其核心設計包含S盒替換、循環移位等作,支持ECB、CBC等標準工作模式。作為中國密碼體系(SM系列)的核心組件,SM4廣泛應用于金融支付、電子政務、物聯網等領域,滿足國產密碼合規要求。算法具備高效軟硬件實現特性,并已通過ISO/IEC國際標準認證(18033-3),成為我國信息安全領域的重要基礎算法。

SM4 應用場景


金融支付:在銀行卡交易、移動支付及網上銀行中加密敏感數據(如交易金額、賬戶信息),確保傳輸安全并符合中國金融行業密碼合規要求;
電子政務:用于電子身份證、政務系統數據傳輸加密,結合SM2簽名算法實現身份認證與數據完整性保護;
物聯網安全:加密智能設備間的通信數據,防止工業級SSD智能家居等場景下的數據泄露;
信創國產化替代:在信息技術應用創新項目中替代AES算法,滿足黨政機關和關鍵基礎設施的自主可控需求。

API方法與使用


generateSymKey 生成對稱密鑰SymKey
let symKey1 = await SM4.generateSymKey();
let symKeyStr1 = CryptoHelper.dataBlobToStr(symKey1.getEncoded(), 'hex');
LogUtil.error(`對稱密鑰1${symKeyStr1}`);

let symKey2 = SM4.generateSymKeySync();
let symKeyStr2 = CryptoHelper.dataBlobToStr(symKey2.getEncoded(), 'base64');
LogUtil.error(`對稱密鑰2${symKeyStr2}`);
encryptGCM 加密(GCM模式)
let gcmParams = CryptoUtil.generateGcmParamsSpec();

let str1 = "鴻蒙技術交流QQ群:1029219059";

let smyKeyHexStr = "da4eed5a22f8883e2339c0b563161c38"; //16進制字符串密鑰
let symKey = await CryptoUtil.getConvertSymKey('SM4_128', smyKeyHexStr, 'hex');
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptGCM(dataBlob, symKey, gcmParams); //加密
let encryptStr1 = CryptoHelper.dataBlobToStr(encryptDataBlob1, 'utf-8');
LogUtil.error(`加密(GCM模式),異步:${encryptStr1}`);

let encryptDataBlob2 = SM4.encryptGCMSync(dataBlob, symKey, gcmParams!); //加密
let encryptStr2 = CryptoHelper.dataBlobToStr(encryptDataBlob2, 'utf-8');
LogUtil.error(`加密(GCM模式),同步:${encryptStr2}`);
decryptGCM 解密(GCM模式)
let gcmParams = CryptoUtil.generateGcmParamsSpec();

let str1 = "鴻蒙技術交流QQ群:1029219059";

let smyKeyHexStr = "da4eed5a22f8883e2339c0b563161c38"; //16進制字符串密鑰
let symKey = await CryptoUtil.getConvertSymKey('SM4_128', smyKeyHexStr, 'hex');
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptGCM(dataBlob, symKey, gcmParams!); //加密
let decryptDataBlob1 = await SM4.decryptGCM(encryptDataBlob1, symKey, gcmParams!); //解密
let decryptStr1 = CryptoHelper.dataBlobToStr(decryptDataBlob1, 'utf-8');
LogUtil.error(`解密(GCM模式),異步:${decryptStr1}`);

let encryptDataBlob2 = SM4.encryptGCMSync(dataBlob, symKey, gcmParams!); //加密
let decryptDataBlob2 = SM4.decryptGCMSync(encryptDataBlob2, symKey, gcmParams!); //解密
let decryptStr2 = CryptoHelper.dataBlobToStr(decryptDataBlob2, 'utf-8');
LogUtil.error(`解密(GCM模式),同步:${decryptStr2}`);
encryptCBC 加密(CBC模式)
let ivParams = CryptoUtil.generateIvParamsSpec();

let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
let smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptCBC(dataBlob, symKey, ivParams); //加密
let encryptStr1 = CryptoHelper.dataBlobToStr(encryptDataBlob1, 'utf-8');
LogUtil.error(`加密(CBC模式),異步:${encryptStr1}`);

let encryptDataBlob2 = SM4.encryptCBCSync(dataBlob, symKey, ivParams); //加密
let encryptStr2 = CryptoHelper.dataBlobToStr(encryptDataBlob2, 'utf-8');
LogUtil.error(`加密(CBC模式),同步:${encryptStr2}`);
decryptCBC 解密(CBC模式)
let ivParams = CryptoUtil.generateIvParamsSpec();

let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
et smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptCBC(dataBlob, symKey, ivParams); //加密
let decryptDataBlob1 = await SM4.decryptCBC(encryptDataBlob1, symKey, ivParams); //解密
let decryptStr1 = CryptoHelper.dataBlobToStr(decryptDataBlob1, 'utf-8');
LogUtil.error(`解密(CBC模式),異步:${decryptStr1}`);

let encryptDataBlob2 = SM4.encryptCBCSync(dataBlob, symKey, ivParams); //加密
let decryptDataBlob2 = SM4.decryptCBCSync(encryptDataBlob2, symKey, ivParams); //解密
let decryptStr2 = CryptoHelper.dataBlobToStr(decryptDataBlob2, 'utf-8');
LogUtil.error(`解密(CBC模式),同步:${decryptStr2}`);
encryptECB 加密(ECB模式)
let str1 = "鴻蒙技術交流QQ群:1029219059";

let smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptECB(dataBlob, symKey); //加密
let encryptStr1 = CryptoHelper.dataBlobToStr(encryptDataBlob1, 'utf-8');
LogUtil.error(`加密(ECB模式),異步:${encryptStr1}`);

let encryptDataBlob2 = SM4.encryptECBSync(dataBlob, symKey); //加密
let encryptStr2 = CryptoHelper.dataBlobToStr(encryptDataBlob2, 'utf-8');
LogUtil.error(`加密(ECB模式),同步:${encryptStr2}`);
decryptECB 解密(ECB模式)
let str1 = "鴻蒙技術交流QQ群:1029219059";

let smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptECB(dataBlob, symKey); //加密
let decryptDataBlob1 = await SM4.decryptECB(encryptDataBlob1, symKey); //解密
let decryptStr1 = CryptoHelper.dataBlobToStr(decryptDataBlob1, 'utf-8');
LogUtil.error(`解密(ECB模式),異步:${decryptStr1}`);

let encryptDataBlob2 = SM4.encryptECBSync(dataBlob, symKey); //加密
let decryptDataBlob2 = SM4.decryptECBSync(encryptDataBlob2, symKey); //解密
let decryptStr2 = CryptoHelper.dataBlobToStr(decryptDataBlob2, 'utf-8');
LogUtil.error(`解密(ECB模式),同步:${decryptStr2}`);
encryptGCMSegment 加密(GCM模式)分段
let gcmParams = CryptoUtil.generateGcmParamsSpec();

let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";

let smyKeyHexStr = "da4eed5a22f8883e2339c0b563161c38"; //16進制字符串密鑰
let symKey = await CryptoUtil.getConvertSymKey('SM4_128', smyKeyHexStr, 'hex');
let dataBlob = CryptoHelper.strToDataBlob(str3, 'utf-8'); //待加密數據


let encryptDataBlob1 = await SM4.encryptGCMSegment(dataBlob, symKey, gcmParams!); //加密
let encryptStr1 = CryptoHelper.dataBlobToStr(encryptDataBlob1, 'utf-8');
LogUtil.error(`分段加密(GCM模式),異步:${encryptStr1}`);

let encryptDataBlob2 = SM4.encryptGCMSegmentSync(dataBlob, symKey, gcmParams!); //加密
let encryptStr2 = CryptoHelper.dataBlobToStr(encryptDataBlob2, 'utf-8');
LogUtil.error(`分段加密(GCM模式),同步:${encryptStr2}`);
decryptGCMSegment 解密(GCM模式)分段
let gcmParams = CryptoUtil.generateGcmParamsSpec();

let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";

let smyKeyHexStr = "da4eed5a22f8883e2339c0b563161c38"; //16進制字符串密鑰
let symKey = await CryptoUtil.getConvertSymKey('SM4_128', smyKeyHexStr, 'hex');
let dataBlob = CryptoHelper.strToDataBlob(str3, 'utf-8'); //待加密數據

let encryptDataBlob1 = await SM4.encryptGCMSegment(dataBlob, symKey, gcmParams!); //加密);
let decryptDataBlob1 = await SM4.decryptGCMSegment(encryptDataBlob1, symKey, gcmParams!); //解密
let decryptStr1 = CryptoHelper.dataBlobToStr(decryptDataBlob1, 'utf-8');
LogUtil.error(`分段解密(GCM模式),異步:${decryptStr1}`);

let encryptDataBlob2 = SM4.encryptGCMSegmentSync(dataBlob, symKey, gcmParams!); //加密
let decryptDataBlob2 = SM4.decryptGCMSegmentSync(encryptDataBlob2, symKey, gcmParams!); //解密
let decryptStr2 = CryptoHelper.dataBlobToStr(decryptDataBlob2, 'utf-8');
LogUtil.error(`分段解密(GCM模式),同步:${decryptStr2}`);

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

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

    關注

    0

    文章

    20

    瀏覽量

    8601
  • SM4
    SM4
    +關注

    關注

    0

    文章

    5

    瀏覽量

    2536
  • HarmonyOS
    +關注

    關注

    80

    文章

    2143

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    harmony-utilsToastUtil,吐司工具類

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

    harmony-utilsTypeUtil,類型檢查工具類

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

    harmony-utilsWantUtil,Want工具類

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

    harmony-utilsWindowUtil,窗口相關工具類

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

    harmony-utilsAES,AES加解密

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

    harmony-utilsDES,DES加解密

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

    harmony-utilsRSA,RSA加解密

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

    harmony-utilsSHA,SHA工具類

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

    harmony-utilsMD5,MD5工具類

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

    harmony-utilsSM2,SM2加解密

    harmony-utilsSM2,SM2加解密 harmony-utils 簡介與說明 [
    的頭像 發表于 06-30 16:47 ?66次閱讀

    harmony-utilsSM3,SM3工具類

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

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

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

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

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

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

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

    harmony-utilsArrayUtil,集合工具類

    # harmony-utilsArrayUtil,集合工具類 ## harmony-utils 簡介與說明 ------[harmony-utils]( https
    的頭像 發表于 06-26 17:38 ?82次閱讀
    主站蜘蛛池模板: 小泽玛利亚在线观看123 | 与子乱刺激对白在线播放 | 精品国产免费一区二区 | 日本特黄特黄刺激大片免费 | 永久黄网站色视频免费 | 91大神网址 | 四虎在线最新地址4hu | 久久就是精品 | 成人久久伊人精品伊人 | a一级日本特黄aaa大片 | 精品久久久久久中文字幕欧美 | 狠狠色噜噜狠狠色综合久 | 午夜老司机福利 | 欧美成人免费网站 | 亚洲 欧洲 日产 韩国在线 | 最新天堂网 | 免费的黄色大片 | 清朝荒淫牲艳史在线播放 | 欧美极品第一页 | 美女被啪到哭网站在线观看 | 天天干天天玩天天操 | 寄宿日记免费看 | 狠狠操欧美 | 欧美性淫爽www视频播放 | 天天狠狠弄夜夜狠狠躁·太爽了 | 91精品国产免费久久久久久青草 | 欧美日韩视频综合一区无弹窗 | 美女视频很黄很暴黄是免费的 | 亚洲视频二 | 久久久久久久蜜桃 | 一区视频在线播放 | 亚洲视频一区在线 | 天天做天天爱天天综合网 | 久久涩综合 | 亚洲综合天堂网 | 黄黄视频在线观看 | 美女隐私黄www视频 美女用手扒开尿口给男生桶爽 | 久久精品视频免费观看 | 午夜视频在线观看一区二区 | 天天色天天色 | 亚洲第一在线播放 |