harmony-utils之RSA,RSA加解密
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);
}
RSA 算法簡介
RSA是1977年提出的非對稱加密算法,基于大數分解難題設計,密鑰分為公鑰(e,n)和私鑰(d,n),其中n為兩質數乘積,d是e的模逆元。加密時將明文m通過c=m^e mod n生成密文,解密則用m=c^d mod n。其安全性依賴分解大數n的計算復雜度,常用于HTTPS密鑰傳輸、數字簽名等場景。但因計算效率低,不適合加密大量數據,且1024位密鑰已可被量子計算威脅,現推薦2048位以上密鑰,是公鑰加密體系的開創性算法。
RSA 應用場景
RSA作為非對稱加密算法,核心應用于需公鑰驗證、私鑰保密的場景。網絡通信中,HTTPS用其加密對稱會話密鑰,PGP加密郵件;數字簽名領域,涵蓋軟件代碼簽名、區塊鏈交易認證及電子文檔簽章;密鑰管理上,支持SSH無密碼登錄與VPN密鑰協商;金融場景中,銀行U盾、CA證書體系依賴其實現身份驗證與抗抵賴性。雖計算開銷大,不適合海量數據加密,但在密鑰安全傳輸和簽名認證中不可或缺,是互聯網安全體系的基礎算法。
API方法與使用
generateKeyPair 生成非對稱密鑰KeyPair
let keyPair1 = await RSA.generateKeyPair();
let pubKeyStr1 = CryptoHelper.dataBlobToStr(keyPair1.pubKey.getEncoded(), 'hex'); //將公鑰轉換成base64字符串。
LogUtil.error(`pubKeyStr1: ${pubKeyStr1}`);
let priKeyStr1 = CryptoHelper.dataBlobToStr(keyPair1.priKey.getEncoded(), 'hex'); //將私鑰轉換成base64符符串。
LogUtil.error(`priKeyStr1: ${priKeyStr1}`);
getConvertKeyPair 獲取轉換的非對稱密鑰KeyPair
let pubKeyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDUpsnavHoapoKtOOM9NKqTt6BpPe07ZzxhMcLAm5dtFQ6zRyJwT3czHGnh1BM2FATvLTDGLkmKc/Ww27//lFbrbqBE19R/5y8UPRpbUdACZ28yqzdiaquovUndhTH/CnLzcPM7VnWO0gp3/kbg5WizkZtUTRHL+Nu4OHbbesO1wIDAQAB"; //base64字符串密鑰
let priKeyStr = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMNSmydq8ehqmgq044z00qpO3oGk97TtnPGExwsCbl20VDrNHInBPdzMcaeHUEzYUBO8tMMYuSYpz9bDbv/+UVutuoETX1H/nLxQ9GltR0AJnbzKrN2Jqq6i9Sd2FMf8KcvNw8ztWdY7SCnf+RuDlaLORm1RNEcv427g4dtt6w7XAgMBAAECgYANvgsii9i3VIDADhgQe80ypFftYTD4btti9seWU7Z2K1Ddzj6axpjWpx+7/L4+md2Qde915pBoSfrQjnGJ21fX7vpqOVdDWS7lseYfM50z8ZMpZewxJNBkSGYQEazMYDfyCFMjZmB4guf/uu0B2JN/YtA8Ed7JJlkXmVLh4ReYSQJBAOIhzozpcIuGOBjylQdN+MokiL14gnAh6hiwnusD9JlTSJbQonUXkhikaf0WphxBVPSngZDdi3FYla/CDUAScBMCQQDdHwsJZ1oShtbJltaUCEsJHTWLwYm8V8tTOpHGJU8/u1mBK3pVZlwnfzzrj2oLl5iBpMHF197TPNi5gjrjM6atAkA/4pMrBixQjqu8iJQHy0R1P1sORER9j2dGcGeFN8nbo0bHrMuozu7sXU7APKzTILXypHwbRCvH6uHnFKiPqGXXAkAUsjEgQjImBcTYvWt8E4Kiab93QzgXDsiTE6pNN3TBbFGmS2F52MjLUZdsHNI6H4hAqiEQ2XGbp9hJFK1aUp1JAkEAjP4fbqrAUjGiG+EbjEffV625kACb6q9Wz+vbspMPqcr5TU2AxxSW65Yilq4pKYq8O+qXnVdOpX7DjrWA1kg2JA=="; //base64字符串密鑰
let keyPair1 = await RSA.getConvertKeyPair(pubKeyStr, priKeyStr, 'base64');
let keyPair2 = RSA.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');
encrypt 加密
let keyPair1 = await RSA.generateKeyPair(); //生成密鑰
let str1 = "鴻蒙技術交流QQ群:1029219059";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據
let encryptDataBlob = await RSA.encrypt(dataBlob, keyPair1.pubKey); //加密
let encryptStr = CryptoHelper.dataBlobToStr(encryptDataBlob, 'utf-8');
LogUtil.error(`加密,異步:${encryptStr}`);
decrypt 解密
let keyPair1 = await RSA.generateKeyPair(); //生成密鑰
let str1 = "鴻蒙技術交流QQ群:1029219059";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密數據
let encryptDataBlob = await RSA.encrypt(dataBlob, keyPair1.pubKey); //加密
let decryptDataBlob = await RSA.decrypt(encryptDataBlob, keyPair1.priKey); //解密
let decryptStr = CryptoHelper.dataBlobToStr(decryptDataBlob, 'utf-8');
LogUtil.error(`解密,異步:${decryptStr}`);or(`加解密,同步:${decryptStr2}`);
encryptSegment 加密,分段
let keyPair1 = await RSA.generateKeyPair("RSA1024|PRIMES_2"); //生成密鑰
let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數據
let encryptDataBlob = await RSA.encryptSegment(dataBlob, keyPair1.pubKey, 'RSA2048|PKCS1'); //加密
let encryptStr = CryptoHelper.dataBlobToStr(encryptDataBlob, 'utf-8');
LogUtil.error(`分段加密,異步:${encryptStr}`);
decryptSegment 解密,分段
let keyPair1 = await RSA.generateKeyPair("RSA1024|PRIMES_2"); //生成密鑰
let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。";
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密數據
let encryptDataBlob = await RSA.encryptSegment(dataBlob, keyPair1.pubKey, 'RSA2048|PKCS1'); //加密
let decryptDataBlob = await RSA.decryptSegment(encryptDataBlob, keyPair1.priKey, 'RSA2048|PKCS1'); //解密
let decryptStr = CryptoHelper.dataBlobToStr(decryptDataBlob, 'utf-8');
LogUtil.error(`分段解密,異步:${decryptStr}`);
sign 對數據進行簽名
let keyPair = await RSA.generateKeyPair(); //生成密鑰
let str1 = "鴻蒙技術交流QQ群:1029219059";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8');
let signDataBlob1 = await RSA.sign(dataBlob, keyPair.priKey);
let signStr1 = CryptoHelper.dataBlobToStr(signDataBlob1, 'hex');
LogUtil.error(`簽名,異步: ${signStr1}`);
verify 對數據進行驗簽
let keyPair = await RSA.generateKeyPair(); //生成密鑰
let str1 = "鴻蒙技術交流QQ群:1029219059";
let signDataBlob1 = await RSA.sign(dataBlob, keyPair.priKey);
let signStr1 = CryptoHelper.dataBlobToStr(signDataBlob1, 'hex');
let verify1 = await RSA.verify(dataBlob, signDataBlob1, keyPair!.pubKey);
LogUtil.error(`驗簽,異步: ${verify1}`);
signSegment 對數據進行分段簽名
let keyPair1 = await RSA.generateKeyPair(); //生成密鑰
let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(str3, 'utf-8');
let signDataBlob = await RSA.signSegment(data, keyPair.priKey);
let signStr = CryptoHelper.dataBlobToStr(signDataBlob, 'base64');
LogUtil.error(`分段簽名,異步: ${signStr}`);
verifySegment 對數據進行分段驗簽
let keyPair1 = await RSA.generateKeyPair(); //生成密鑰
let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封裝了常用工具類,提供一系列簡單易用的方法。幫助開發者快速構建鴻蒙應用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主頁地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(str3, 'utf-8');
let signDataBlob = await RSA.signSegment(data, keyPair.priKey);
let verify = await RSA.verifySegment(data, signDataBlob, keyPair.pubKey);
LogUtil.error(`分段驗簽,異步: ${verify}`);
recover 對數據進行簽名恢復原始數據,目前僅RSA支持
let keyPair1 = await RSA.generateKeyPair(); //生成密鑰
let str1 = "鴻蒙技術交流QQ群:1029219059";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8');
let signDataBlob = RSA.signSync(dataBlob, keyPair.priKey, 'RSA1024|PKCS1|NoHash|OnlySign');
let recoverDataBlob = await RSA.recover(signDataBlob, keyPair.pubKey);
if (recoverDataBlob != null) {
let recoverStr = CryptoHelper.dataBlobToStr(recoverDataBlob, 'utf-8');
LogUtil.error(`簽名恢復,異步: ${recoverStr}`);
} else {
LogUtil.error(`簽名恢復,異步: 恢復數據為空!`);
}
創作不易,請給童長老點贊
審核編輯 黃宇
-
RSA
+關注
關注
0文章
60瀏覽量
19257 -
Harmony
+關注
關注
0文章
75瀏覽量
2975
發布評論請先 登錄
評論