HarmonyOS 鸿蒙Next AES/CBC/PKCS5Padding 加密要和java相同,请问要怎么加密,我加密出来值不同
HarmonyOS 鸿蒙Next AES/CBC/PKCS5Padding 加密要和java相同,请问要怎么加密,我加密出来值不同
java代码
public static String encryptAES(String content, String key)
throws InvalidKeyException, NoSuchAlgorithmException,
NoSuchPaddingException, UnsupportedEncodingException,
InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
byte[] byteContent = content.getBytes("UTF-8");
String IV_STRING = key.substring(0, 16);
// 注意,为了能与 iOS 统一
// 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成
byte[] enCodeFormat = key.getBytes();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
byte[] initParam = IV_STRING.getBytes();
IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
// 指定加密的算法、工作模式和填充方式
Cipher cipher = Cipher.getInstance(CipherMode);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec,ivParameterSpec);
byte[] encryptedBytes = cipher.doFinal(byteContent);
String mm = new String(Hex.encodeHex(encryptedBytes));
return mm.toUpperCase();
}
let sKey: string = "qnfk0xqkmm6xrwc6mk61tmc4xxw9vm00"
let iv: string = "qnfk0xqkmm6xrwc6"
static async aesEncrypt(text: string, key: string, iv: string): Promise<string> {
try {
//转换key
let symKeyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(key, 'utf-8').buffer) };
let aesGenerator = cryptoFramework.createSymKeyGenerator("AES128");
let symKey = await aesGenerator.convertKey(symKeyBlob);
// 初始化加解密操作环境
let mode = cryptoFramework.CryptoMode.ENCRYPT_MODE;
//创建加密器
let cipher = cryptoFramework.createCipher("AES128|CBC|PKCS5");
let ivBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(iv, 'utf-8').buffer) };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
//初始化加密
await cipher.init(mode, symKey, ivParamsSpec);
//开始加密
let updateOutput = await cipher.doFinal({ data: new Uint8Array(buffer.from(text, 'utf-8').buffer) });
console.log("Test", "encrypt result:" + updateOutput.data.toString())
//转换字符串
// let result =
let result = uint8ArrayToHexStr(updateOutput.data)
let a = util.TextDecoder.create('utf-8').decodeWithStream(updateOutput.data).trim()
LogUtil.debug("测试1", result)
LogUtil.debug("测试2", a)
return result
} catch (error) {
console.log("Test", "encrypt error result:" + JSON.stringify(error))
return "error"
}
}
更多关于HarmonyOS 鸿蒙Next AES/CBC/PKCS5Padding 加密要和java相同,请问要怎么加密,我加密出来值不同的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,加解密 AES/CBC/PKCS5Padding 可以看下三方库:crypto-js
参考链接:https://ohpm.openharmony.cn/#/cn/detail/[@ohos](/user/ohos)%2Fcrypto-js
更多关于HarmonyOS 鸿蒙Next AES/CBC/PKCS5Padding 加密要和java相同,请问要怎么加密,我加密出来值不同的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
搞出来的值不java不同
您好!您java加密的输入和输出分别是?加密方式具体是如何操作的?直接进行AES加密没有其他操作了吗? 当前鸿蒙的输入和输出是?
解决了 用的加密库
crypto-js 吗?
是的
在HarmonyOS鸿蒙Next系统中,若要使用AES/CBC/PKCS5Padding加密方式与Java实现相同的加密结果,需要确保加密过程中的密钥、初始向量(IV)、填充方式等参数完全一致。以下是一个简要的实现思路:
-
密钥管理:确保Java端和HarmonyOS端使用的密钥完全一致。密钥长度需符合AES标准(如128位、192位或256位)。
-
初始向量(IV):IV在CBC模式下用于加密的第一块数据,需保持一致。可以随机生成并共享,或在双方预先约定。
-
填充方式:PKCS5Padding是Java中的标准填充方式,HarmonyOS端需使用相同的填充算法。
-
加密模式:确保双方使用AES/CBC/PKCS5Padding加密模式。
-
数据编码:加密前,确保输入数据编码方式一致(如UTF-8)。
在HarmonyOS中,可以使用系统提供的加密库进行AES加密,并指定CBC模式和PKCS5Padding填充。由于具体代码实现涉及平台API调用,无法直接提供,但可参考HarmonyOS官方文档或示例代码设置上述参数。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html