使用cryptoFramework做sm4解密操作,解密失败。
代码如下:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
export class SM4 {
static async decode() {
try {
let textEncoder = new util.TextEncoder('utf-8');
let keyData = textEncoder.encodeInto("xxxx");
let symKey = await genSymKeyByData(keyData);
let message = "1B28346B2EE0xxxx05B464C42D7757B";
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
let decryptText = await decryptMessagePromise(symKey, plainText);
} catch (e) {
console.error(JSON.stringify(e))
}
}
}
async function genSymKeyByData(symKeyData: Uint8Array) {
let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
let symKey = await symGenerator.convertKey(symKeyBlob);
console.info('convertKey success');
return symKey;
}
async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
try {
let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7');
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
let decryptData = await decoder.doFinal(cipherText);
return decryptData
} catch (e) {
console.error(e)
return null;
}
}
参考SM4加解密代码,用java代码加密后使用ArkTs解密,需要加解密属性参数java和ArkTs一致。参考链接:https://blog.csdn.net/xiaojin21cen/article/details/132450828