91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

harmony-utils之SM4,SM4加解密

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

掃碼添加小助手

加入工程師交流群

harmony-utils之SM4,SM4加解密

harmony-utils 簡介與說明


harmony-utils 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實(shí)用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信、彈框、吐司、生物認(rèn)證、用戶首選項(xiàng)、拍照、相冊(cè)、掃碼、文件、日志、異常捕獲、字符、字符串、數(shù)字、集合、日期、隨機(jī)、base64、加密、解密、JSON等一系列的功能和作,能夠滿足各種不同的開發(fā)需求。
picker_utils 是harmony-utils拆分出來的一個(gè)子庫,包含 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是中國自主研發(fā)的商用對(duì)稱加密算法,由國家密碼管理局于2006年發(fā)布,2012年成為國家密碼行業(yè)標(biāo)準(zhǔn)(GM/T 0002-2012)。該算法采用128位分組長度和128位密鑰長度,通過32輪非線性迭代結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)加密,安全強(qiáng)度與AES-128相當(dāng)。其核心設(shè)計(jì)包含S盒替換、循環(huán)移位等作,支持ECB、CBC等標(biāo)準(zhǔn)工作模式。作為中國密碼體系(SM系列)的核心組件,SM4廣泛應(yīng)用于金融支付、電子政務(wù)、物聯(lián)網(wǎng)等領(lǐng)域,滿足國產(chǎn)密碼合規(guī)要求。算法具備高效軟硬件實(shí)現(xiàn)特性,并已通過ISO/IEC國際標(biāo)準(zhǔn)認(rèn)證(18033-3),成為我國信息安全領(lǐng)域的重要基礎(chǔ)算法。

SM4 應(yīng)用場(chǎng)景


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

API方法與使用


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

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

let str1 = "鴻蒙技術(shù)交流QQ群:1029219059";

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

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 = "鴻蒙技術(shù)交流QQ群:1029219059";

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

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工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發(fā)者快速構(gòu)建鴻蒙應(yīng)用。";
let smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數(shù)據(jù)

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工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發(fā)者快速構(gòu)建鴻蒙應(yīng)用。";
et smyKeyBase64Str = "2k7tWiL4iD4jOcC1YxYcOA=="; //base64符串密鑰
let symKey = CryptoUtil.getConvertSymKeySync('SM4_128', smyKeyBase64Str, 'base64');
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數(shù)據(jù)

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 = "鴻蒙技術(shù)交流QQ群:1029219059";

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

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 = "鴻蒙技術(shù)交流QQ群:1029219059";

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

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工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發(fā)者快速構(gòu)建鴻蒙應(yīng)用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";

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


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工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發(fā)者快速構(gòu)建鴻蒙應(yīng)用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";

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

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

創(chuàng)作不易,請(qǐng)給童長老點(diǎn)贊

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 方舟
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    8804
  • SM4
    SM4
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    2617
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2153

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SM4算法實(shí)現(xiàn)分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結(jié)構(gòu),以字為單位進(jìn)行加密、解密運(yùn)算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴(kuò)展都是采用32輪非線性迭代結(jié)構(gòu)
    發(fā)表于 10-30 08:10

    SM4算法原理及分享1

    F。SM4算法加/解密算法的結(jié)構(gòu)相同,只是使用輪密鑰相反,其中解密輪密鑰是加密輪密鑰的逆序。 輪函數(shù)F表達(dá)式為: rki為輪密鑰,由密鑰擴(kuò)展函數(shù)的產(chǎn)生
    發(fā)表于 10-30 06:54

    國密系列算法簡介及SM4算法原理介紹

    所示: 非對(duì)稱加密算法:SM2算法可用于電子認(rèn)證服務(wù);SM9算法可用于各種互聯(lián)網(wǎng)新興應(yīng)用。 對(duì)稱加密算法:SM1算法未公布,以IP核的形式存在于芯片中,可用于電子政務(wù)、電子商務(wù)及國民經(jīng)濟(jì)等領(lǐng)域;
    發(fā)表于 10-24 08:25

    AES和SM4算法的可重構(gòu)分析

    Table,LUT)和基于伽羅瓦域(Galois Field,GF)兩種方式?;贚UT實(shí)現(xiàn)S盒,AES加解密需要2塊LUT,SM4加解密需要1塊LUT,合計(jì)3塊LUT。然而,兩種算法的S盒在GF下具有
    發(fā)表于 10-23 07:26

    基于FPGA利用sm4進(jìn)行實(shí)時(shí)圖像加密

    求一份在fpga上利用sm4進(jìn)行實(shí)時(shí)圖像加密的文件
    發(fā)表于 09-15 19:05

    harmony-utilsCacheUtil,緩存工具類

    harmony-utilsCacheUtil,緩存工具類
    的頭像 發(fā)表于 07-04 16:36 ?501次閱讀

    harmony-utilsCharUtil,字符工具類

    harmony-utilsCharUtil,字符工具類
    的頭像 發(fā)表于 07-04 16:34 ?497次閱讀

    harmony-utilsDeviceUtil,設(shè)備相關(guān)工具類

    harmony-utilsDeviceUtil,設(shè)備相關(guān)工具類
    的頭像 發(fā)表于 07-03 18:27 ?637次閱讀

    harmony-utilsFileUtil,文件相關(guān)工具類

    harmony-utilsFileUtil,文件相關(guān)工具類
    的頭像 發(fā)表于 07-03 18:23 ?580次閱讀

    harmony-utilsImageUtil,圖片相關(guān)工具類

    harmony-utilsImageUtil,圖片相關(guān)工具類
    的頭像 發(fā)表于 07-03 18:22 ?901次閱讀

    harmony-utilsAES,AES加解密

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

    harmony-utilsDES,DES加解密

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

    harmony-utilsRSA,RSA加解密

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

    harmony-utilsSM2,SM2加解密

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

    harmony-utilsSM3,SM3工具類

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