输出:encrypt 16进制 plainText: d5c3020464e75d530de9d5fb62cc2e97 encrypt base64 plainText: 1cMCBG***6dX7Yswulw== encrypt plainText: d5c30204***fb62cc2e97 decrypt plainText: hello,world! decrypt ok104,101,108,108,111,44,119,111,114,108,100,33以下是AES/CBC/PKCS5import { cryptoFramework } from '@kit.CryptoArchitectureKit'; import { buffer, util } from '@kit.ArkTS'; @Entry @Component struct AESCBCCrypto { @State message: string = '点击开始'; build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { aesCBC() }) } .width('100%') } .height('100%') } } function genIvParamsSpec() { let arr = [228, 174, 73, 141, 198, 234, 26, 204, 141, 187, 217, 9, 225, 108, 17, 86]; // 16 bytes let dataIv = new Uint8Array(arr); let ivBlob: cryptoFramework.DataBlob = { data: dataIv }; let ivParamsSpec: cryptoFramework.IvParamsSpec = { algName: "IvParamsSpec", iv: ivBlob }; return ivParamsSpec; } // 加密消息 function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS5'); let iv = genIvParamsSpec(); cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv); let cipherData = cipher.doFinalSync(plainText); return cipherData; } // 解密消息 function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS5'); let iv = genIvParamsSpec(); decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv); // let decryptData = decoder.updateSync(cipherText); let decryptData = decoder.doFinalSync(cipherText); return decryptData; } function genSymKeyByData(symKeyData: Uint8Array) { let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); let symKey = aesGenerator.convertKeySync(symKeyBlob); console.info('convertKey success'); return symKey; } function aesCBC() { try { let base64 = new util.Base64Helper(); let pk = "1234567891234567"; let key = new Uint8Array(buffer.from(pk, 'utf-8').buffer) let symKey = genSymKeyByData(key); let text = "hello,world!"; let newBuf = buffer.from(buffer.from(text, 'utf-8').buffer); let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(newBuf.buffer) }; let encryptText = encryptMessage(symKey, plainText); console.error('encrypt 16进制 plainText: ' + buffer.from(encryptText.data).toString('hex')); console.error('encrypt base64 plainText: ' + base64.encodeToStringSync(encryptText.data)); console.error('encrypt plainText: ' + buffer.from(encryptText.data).toString('hex')); let decryptText = decryptMessage(symKey, encryptText); console.error('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); console.error('decrypt ok' + decryptText.data.toString()); } catch (error) { console.error(JSON.stringify(error)); } }
输出:
以下是AES/CBC/PKCS5