确保加解密使用的密钥保持一致。import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer } from '@kit.ArkTS';
@Entry
@Component
struct EncryptComponent {
@State data: string = '';
@State encryptText: cryptoFramework.DataBlob | null = null;
@State decryptTextString: string = '';
@State result: string = '';
// 加密消息
encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
let cipher = cryptoFramework.createCipher('SM4_128|ECB|PKCS7');
cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
let encryptData = cipher.doFinalSync(plainText);
return encryptData;
}
decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7');
decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
let decryptData = decoder.doFinalSync(cipherText);
return decryptData;
}
genSymKeyByData(symKeyData: Uint8Array) {
let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
let symKey = symGenerator.convertKeySync(symKeyBlob);
return symKey;
}
encryptSuccess() {
let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]);
let symKey = this.genSymKeyByData(keyData);
let message = this.data;
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
this.encryptText = this.encryptMessage(symKey, plainText);
this.result = `加密结果(DataBlob):${this.encryptText.data.toString()}`;
}
decryptSuccess() {
let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]);
let symKey = this.genSymKeyByData(keyData);
if (this.encryptText != null) {
let decryptText = this.decryptMessage(symKey, this.encryptText);
this.decryptTextString = buffer.from(decryptText.data).toString('utf-8');
this.result = `解密结果(DataBlob):${decryptText.data.toString()}\n解密结果(string):${this.decryptTextString}`;
} else {
this.result = '无加密内容,需先加密';
}
}
build() {
Column({ space: 15 }) {
TextInput({ placeholder: '输入加密内容' })
.onChange((value: string) => {
this.data = value;
})
.margin({ left: 15, right: 15 })
Button('加密')
.onClick(() => {
this.encryptSuccess();
})
Button('解密')
.onClick(() => {
this.decryptSuccess();
})
Text(this.result)
.fontSize(20)
}
.height('100%')
.width('100%')
.justifyContent(FlexAlign.Center)
}
}