1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16// [Start ecb_encrypt_decrypt_aes_symkey_async] 17import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 18import { buffer } from '@kit.ArkTS'; 19 20// 加密消息 21async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { 22 let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7'); 23 await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); 24 let cipherData = await cipher.doFinal(plainText); 25 return cipherData; 26} 27 28// 解密消息 29async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { 30 let decoder = cryptoFramework.createCipher('AES128|ECB|PKCS7'); 31 await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); 32 let decryptData = await decoder.doFinal(cipherText); 33 return decryptData; 34} 35 36async function genSymKeyByData(symKeyData: Uint8Array) { 37 let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; 38 let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); 39 let symKey = await aesGenerator.convertKey(symKeyBlob); 40 console.info('convertKey success'); 41 return symKey; 42} 43 44async function aesECB() { 45 try { 46 let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); 47 let symKey = await genSymKeyByData(keyData); 48 let message = 'This is a test'; 49 let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; 50 let encryptText = await encryptMessagePromise(symKey, plainText); 51 let decryptText = await decryptMessagePromise(symKey, encryptText); 52 if (plainText.data.toString() === decryptText.data.toString()) { 53 console.info('decrypt ok'); 54 console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); 55 } else { 56 console.error('decrypt failed'); 57 } 58 } catch (error) { 59 console.error(`AES ECB “${error}“, error code: ${error.code}`); 60 } 61} 62// [End ecb_encrypt_decrypt_aes_symkey_async] 63 64@Entry 65@Component 66struct Index { 67 @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; 68 69 build() { 70 Column({ space: 12 }) { 71 Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) 72 Button($r('app.string.call_aes_ecb_asynchronous')) 73 .width('70%') 74 .onClick(() => { 75 try { 76 aesECB(); 77 this.message = 'AES_ECBAsynchronousSuccess'; 78 } catch { 79 this.message = 'AES_ECBAsynchronousFail'; 80 } 81 }) 82 } 83 .height('100%') 84 .width('100%') 85 } 86}