可以从如下链接处下载官网提供的关于加解密的示例代码https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20240605105421.87085760543017233932108650648019:50001231000000:2800:43DB200C7B6C8A2290D849767226EB7C9F748A21C9F458833A7F520EC17CB9FA.zip?needInitFileName=true若您需要使用iv作为参数的加解密模式,可以参考如下代码修改示例代码工程中的CipherModel.ets文件import { cryptoFramework } from "@kit.CryptoArchitectureKit"; import { buffer, util } from '@kit.ArkTS'; import Logger from './Logger'; import { BusinessError } from '@kit.BasicServicesKit'; const TAG: string = '[CipherModel]' const RSA_ENCRYPT_KEY: string = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALXJZEloyLbBB6UbUQzUtM3WGTkcd4xxxxxxxxxxx6EiUjcaQq8c906hqv6/J7Bv9Owj59XMauKweJUCAwEAAQ=='; const RSA_DECRYPT_KEY: string = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAtclkSWjItsEHpRtRDNS0zdYZORx3h2fgeALEvnAdx0gKgtu/oSJSNxpCrxz3TqGq/r8nsG/07CPn1cxq4rB4lQxxxxxxxxxxxxxxxxxxxxxxx3eAEuFNl/qoV6c4zRUAx+efZ29rDz6CVWuAhxaVBDUOmOHvyxOL8m8IBAiEA3EcTP1jngtiJ8lffvIVbehM6p7437+9UScKMXZSy/PkCIQDTRFj00GbAW9oKqEWTrUCWNxNFCSR82Mlw1sZvQh5LfQIgBApBrh3BUUMLdKhr8Bc6EEkeAEma2Qm4sAmjbWv2xHECIF81ux1BWj0wZ9hLs2d1Odk4ot+G2kHFdSr8L9tuIbcFAiEA2rEXmzyQTxZM1N4QDkaLJiCwSfMTYu48DxfUcevbfhA='; const RSA512_PRIMES_2: string = 'RSA512|PRIMES_2'; const RSA512_PKCS1: string = 'RSA512|PKCS1'; const AES128: string = 'AES128'; const AES128_PKCS7: string = 'AES128|PKCS7'; const AES256: string = 'AES256'; const AES256_PKCS5: string = 'AES256|CBC|PKCS5'; // const AES_ENCRYPT_KEY: string = '5QXzAbJj0TJN9OQNvxFhhw=='; // const AES_ENCRYPT_KEY: string = 'xxxx_aaaa22334_aaaa1111-aa11-aaa'; // const AES_ENCRYPT_KEY: string = 'xxxx_aaaa22334_aaaa1111-aa11-aaa';//原 const AES_ENCRYPT_KEY: string = 'ZwGb1EptBYzsMMT2e5ZvMdGMwZ1msuaaAxyV0JpN+6Y='; // const AES_IV_KEY: string = 'xx_aaaa22334_aaa';//原 const AES_IV_KEY: string = 'ZXF5bvg0Ne84+R8pAZNmFg=='; export class CipherModel { aesEncrypt(message: string, callback) { //5QXzAbJj0TJN9OQNvxFhhw== 这种长度的key使用AES128 // let aesGenerator = cryptoFramework.createSymKeyGenerator(AES128); //32字节的key需要使用AES256 let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256); let cipher = cryptoFramework.createCipher(AES256_PKCS5); let that = new util.Base64Helper(); //密钥为普通字符串 // let textEncoder = new util.TextEncoder(); // let buffer = new ArrayBuffer(20); // let result = new Uint8Array(buffer); // result = textEncoder.encodeInto(AES_ENCRYPT_KEY); //密钥为base64字符串 //当 AES_ENCRYPT_KEY为base64类型的字符串是才需要调用下述解码方法 let result = that.decodeSync(AES_ENCRYPT_KEY); let pubKeyBlob: cryptoFramework.DataBlob = { data: result }; aesGenerator.convertKey(pubKeyBlob, (err, symKey) => { if (err) { console.error("aesEncrypt convertKey: error." + (err as BusinessError).code); return; } console.log("--- symKey: " + symKey); //偏移量为base64字符串 let ivData = that.decodeSync(AES_IV_KEY) //偏移量为普通字符串 // let ivData = this.stringToUint8Array(AES_IV_KEY); let ivdata: cryptoFramework.DataBlob = { data: ivData }; //偏移 let iv: cryptoFramework.IvParamsSpec = { iv: ivdata, algName: 'IvParamsSpec' } // cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, { algName: AES_IV_KEY }, (err, data) => { cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv, (err, data) => { let input: cryptoFramework.DataBlob = { data: this.stringToUint8Array(message) }; cipher.doFinal(input, (err, data) => { Logger.info(TAG, "EncryptOutPut is " + data.data); let result = that.encodeToStringSync(data.data) Logger.info(TAG, "result is " + result); callback(result) }) }) }) } stringToUint8Array(str) { var arr = []; for (var i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } var tmpArray = new Uint8Array(arr); return tmpArray; } uint8ArrayToString(array: Uint8Array) { let arrayString = ''; for (let i = 0; i < array.length; i++) { arrayString += String.fromCharCode(array[i]); } return arrayString; } rsaEncrypt(message: string, callback) { let rsaGenerator = cryptoFramework.createAsyKeyGenerator(RSA512_PRIMES_2); let cipher = cryptoFramework.createCipher(RSA512_PKCS1); let that = new util.Base64Helper(); let pubKey = that.decodeSync(RSA_ENCRYPT_KEY); let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKey };// 密钥 rsaGenerator.convertKey(pubKeyBlob, null, (err, keyPair) => { if (err) { console.error("convertKey: error." + (err as BusinessError).code); return; } cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null, (err, data) => { let input: cryptoFramework.DataBlob = { data: this.stringToUint8Array(message) }; cipher.doFinal(input, (err, data) => { console.info("EncryptOutPut is " + data.data); // let result = that.encodeToStringSync(data.data) let result = new util.Base64Helper().encodeToStringSync(data.data) console.info( "rsaEncrypt result is " + result); callback(result) }) }) }) } rsaDecrypt(message: string, callback) { let rsaGenerator = cryptoFramework.createAsyKeyGenerator(RSA512_PRIMES_2); let cipher = cryptoFramework.createCipher(RSA512_PKCS1); let that = new util.Base64Helper(); let priKey = that.decodeSync(RSA_DECRYPT_KEY); let priKeyBlob: cryptoFramework.DataBlob = { data: priKey }; rsaGenerator.convertKey(null, priKeyBlob, (err, keyPair) => { if (err) { Logger.error(TAG, "convertKey: error." + (err as BusinessError).code); return; } cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.priKey, null, (err, data) => { try { let newMessage = that.decodeSync(message); let input: cryptoFramework.DataBlob = { data: newMessage }; cipher.doFinal(input, (err, data) => { if (err) { Logger.error(TAG, "cipher doFinal." + (err as BusinessError).code); return; } Logger.info(TAG, "DecryptOutPut is " + data.data); let result = this.uint8ArrayToString(data.data); Logger.info(TAG, "result is " + result); callback(result) }) } catch (err) { Logger.info(TAG, "cipher init error: " + (err as BusinessError).code); return err; } }) }) } aesDecrypt(message: string, callback) { //同加密方法中的描述 let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256); let cipher = cryptoFramework.createCipher(AES256_PKCS5); let that = new util.Base64Helper(); //密钥为普通字符串 // let textEncoder = new util.TextEncoder(); // let buffer = new ArrayBuffer(20); // // let result = new Uint8Array(buffer); // // result = textEncoder.encodeInto(AES_ENCRYPT_KEY); //密钥为base64字符串 let result = that.decodeSync(AES_ENCRYPT_KEY) //dT/MzvKuG2VSsp+h62E/yQ== let pubKeyBlob: cryptoFramework.DataBlob = { data: result }; aesGenerator.convertKey(pubKeyBlob, (err, symKey) => { if (err) { console.error("aesDecrypt convertKey: error." + (err as BusinessError).code); return; } //偏移量为普通字符串 // let ivData = this.stringToUint8Array(AES_IV_KEY); //偏移量为base64字符串 let ivData = that.decodeSync(AES_IV_KEY) let ivdata: cryptoFramework.DataBlob = { data: ivData }; //偏移 let iv: cryptoFramework.IvParamsSpec = { iv: ivdata, algName: 'IvParamsSpec' } // cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null, (err, data) => { cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv, (err, data) => { try { let newMessage = that.decodeSync(message); //测试用 // let newMessage = that.decodeSync('dT/MzvKuG2VSsp+h62E/yQ=='); let input: cryptoFramework.DataBlob = { data: newMessage }; cipher.doFinal(input, (err, data) => { if (err) { Logger.error(TAG, "cipher doFinal." + (err as BusinessError).code); return; } Logger.info(TAG, "DecryptOutPut is " + data?.data); let result = this.uint8ArrayToString(data?.data) Logger.info(TAG, "result is " + result); callback(result) }) } catch (err) { Logger.info(TAG, "cipher init error: " + (err as BusinessError).code); return err; } }) }) } }
可以从如下链接处下载官网提供的关于加解密的示例代码
https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20240605105421.87085760543017233932108650648019:50001231000000:2800:43DB200C7B6C8A2290D849767226EB7C9F748A21C9F458833A7F520EC17CB9FA.zip?needInitFileName=true
若您需要使用iv作为参数的加解密模式,可以参考如下代码修改示例代码工程中的CipherModel.ets文件