• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_sync]
17import { cryptoFramework } from '@kit.CryptoArchitectureKit';
18import { buffer } from '@kit.ArkTS';
19
20// 加密消息
21function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
22  let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
23  cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
24  let cipherData = cipher.doFinalSync(plainText);
25  return cipherData;
26}
27
28// 解密消息
29function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
30  let decoder = cryptoFramework.createCipher('AES128|ECB|PKCS7');
31  decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
32  let decryptData = decoder.doFinalSync(cipherText);
33  return decryptData;
34}
35
36function genSymKeyByData(symKeyData: Uint8Array) {
37  let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
38  let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
39  let symKey = aesGenerator.convertKeySync(symKeyBlob);
40  console.info('convertKeySync success');
41  return symKey;
42}
43
44function main() {
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 = 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 = encryptMessage(symKey, plainText);
51    let decryptText = decryptMessage(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_sync]
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_synchronous'))
73        .width('70%')
74        .onClick(() => {
75          try {
76            main();
77            this.message = 'AES_ECBSynchronousSuccess';
78          } catch {
79            this.message = 'AES_ECBSynchronousFail';
80          }
81        })
82    }
83    .height('100%')
84    .width('100%')
85  }
86}