HarmonyOS 鸿蒙Next AES128加密失败问题
HarmonyOS 鸿蒙Next AES128加密失败问题
import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
// LxamphMX2OpWNPZm
async onData(str: string, iv: string){
let cipherAlgName = 'AES128|CBC|PKCS5';
try {
let cipher = cryptoFramework.createCipher(cipherAlgName);
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
console.info('cipher algName:' + cipher.algName);
let keyMaterial = new Uint8Array(stringToArray('LxamphMX2OpWNPZm'));
try {
let symKey = await symKeyGenerator.convertKey({
data: keyMaterial
});
let ivParamsSpec = null;
if (iv !== '') {
// let ivData = {
// data: new Uint8Array(stringToArray(iv))
// };
// ivParamsSpec [''] = 'IvParamsSpec';
// ivParamsSpec[iv] = ivData;
}
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParamsSpec);
let res = await cipher.doFinal({
data: new Uint8Array(stringToArray(str))
});
// return YumpUtil.uint8ArrayToBase64String(res.data);
console.log('res.data>>23', JSON.stringify(res.data))
} catch(error){
console.log(`error:onData${JSON.stringify(error)}`);
}
} catch (error) {
let e: BusinessError = error as BusinessError;
console.error(`sync error, ${e.code}, ${e.message}`);
}
}
build() {
RelativeContainer() {
Button('onData').onClick(() =>{
this.onData('12369', '');
})
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next AES128加密失败问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
参考以下demo:
import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
// LxamphMX2OpWNPZm
async onData(str: string, iv: string){
let cipherAlgName = 'AES128|CBC|PKCS5';
try {
let cipher = cryptoFramework.createCipher(cipherAlgName);
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
console.info('cipher algName:' + cipher.algName);
let keyMaterial = new Uint8Array(stringToArray('LxamphMX2OpWNPZm'));
try {
let symKey = await symKeyGenerator.convertKey({
data: keyMaterial
});
let ivParamsSpec = null;
if (iv !== '') {
// let ivData = {
// data: new Uint8Array(stringToArray(iv))
// };
// ivParamsSpec [''] = 'IvParamsSpec';
// ivParamsSpec[iv] = ivData;
}
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParamsSpec);
let res = await cipher.doFinal({
data: new Uint8Array(stringToArray(str))
});
// return YumpUtil.uint8ArrayToBase64String(res.data);
console.log('res.data>>23', JSON.stringify(res.data))
} catch(error){
console.log(`error:onData${JSON.stringify(error)}`);
}
} catch (error) {
let e: BusinessError = error as BusinessError;
console.error(`sync error, ${e.code}, ${e.message}`);
}
}
build() {
RelativeContainer() {
Button('onData').onClick(() =>{
this.onData('12369', '');
})
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next AES128加密失败问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS鸿蒙Next AES128加密失败的问题,可能的原因及解决方案如下:
-
密钥管理不当:
- 确认加密密钥是否正确生成和存储。在鸿蒙系统中,密钥的管理应遵循系统的安全规范,确保密钥在生成、存储和使用过程中不被泄露或篡改。
-
加密模式或填充方式错误:
- 检查加密模式(如CBC、ECB等)和填充方式(如PKCS7、NoPadding等)是否与解密时一致。不同的加密模式和填充方式会导致加密结果不兼容。
-
初始化向量(IV)问题:
- 如果使用需要IV的加密模式(如CBC),确保IV在加密和解密时相同且随机生成。IV的重复使用会降低加密的安全性。
-
数据格式问题:
- 确认待加密数据的格式是否符合加密算法的要求。例如,某些算法可能要求数据以特定字节数对齐。
-
库或API使用错误:
- 检查使用的加密库或API是否正确调用,参数设置是否合理。鸿蒙系统提供了丰富的加密API,但错误的使用方式可能导致加密失败。
如果以上检查均无误,但问题依旧存在,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html 他们会提供更专业的技术支持和解决方案。