HarmonyOS 鸿蒙Next AES/CBC/PKCS5Padding 加密要和java相同,请问要怎么加密,我加密出来值不同

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

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

8 回复

您好,加解密 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)、填充方式等参数完全一致。以下是一个简要的实现思路:

  1. 密钥管理:确保Java端和HarmonyOS端使用的密钥完全一致。密钥长度需符合AES标准(如128位、192位或256位)。

  2. 初始向量(IV):IV在CBC模式下用于加密的第一块数据,需保持一致。可以随机生成并共享,或在双方预先约定。

  3. 填充方式:PKCS5Padding是Java中的标准填充方式,HarmonyOS端需使用相同的填充算法。

  4. 加密模式:确保双方使用AES/CBC/PKCS5Padding加密模式。

  5. 数据编码:加密前,确保输入数据编码方式一致(如UTF-8)。

在HarmonyOS中,可以使用系统提供的加密库进行AES加密,并指定CBC模式和PKCS5Padding填充。由于具体代码实现涉及平台API调用,无法直接提供,但可参考HarmonyOS官方文档或示例代码设置上述参数。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部