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 sync_symmetry_encrypt_decrypt] 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('3DES192|ECB|PKCS7'); 23 cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); 24 let encryptData = cipher.doFinalSync(plainText); 25 return encryptData; 26} 27 28// 解密消息 29function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { 30 let decoder = cryptoFramework.createCipher('3DES192|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 symGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); 39 let symKey = symGenerator.convertKeySync(symKeyBlob); 40 console.info('convertKeySync success'); 41 return symKey; 42} 43 44function main() { 45 let keyData = 46 new Uint8Array([238, 249, 61, 55, 128, 220, 183, 224, 139, 253, 248, 239, 239, 41, 71, 25, 235, 206, 230, 162, 249, 47 27, 234, 114]); 48 let symKey = genSymKeyByData(keyData); 49 let message = 'This is a test'; 50 let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; 51 let encryptText = encryptMessage(symKey, plainText); 52 let decryptText = decryptMessage(symKey, encryptText); 53 if (plainText.data.toString() === decryptText.data.toString()) { 54 console.info('decrypt ok'); 55 console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); 56 } else { 57 console.error('decrypt failed'); 58 } 59} 60// [End sync_symmetry_encrypt_decrypt] 61 62@Entry 63@Component 64struct Index { 65 @State message: string = 'Encryption Decryption Guidance 3DES ArkTs'; 66 67 build() { 68 Column({ space: 12 }) { 69 Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) 70 Button($r('app.string.call_3des_ecb_synchronous')) 71 .width('70%') 72 .onClick(() => { 73 try { 74 main(); 75 this.message = '3DES_ECBSuccess'; 76 } catch { 77 this.message = '3DES_ECBFail'; 78 } 79 }) 80 } 81 .height('100%') 82 .width('100%') 83 } 84}