代码之家  ›  专栏  ›  技术社区  ›  Alessandro Baldoni

Java加密生成密钥可移植性

  •  1
  • Alessandro Baldoni  · 技术社区  · 15 年前

    在爪哇中,为了加密目的,我正在生成和序列化对称密钥:

        KeyGenerator keyGen = KeyGenerator.getInstance(algorithm);
        SecretKey symmetricKey = keyGen.generateKey();
        Base64.encode(symmetricKey.getEncoded(), new FileOutputStream(filename));    
    

    其中base64来自于bouncycastle加密包,算法是aes。

    当与Oracle(Sun)JVM 1.6.0_21一起使用时,该密钥会完美地从Windows移到Linux(甚至在32/64位操作系统之间)。

    在OS X(Intel)上,使用苹果的JVM,可以毫无例外地加载密钥,但在Windows或Linux上加密的每个字符串都会生成一个badpaddingException。

    使用以下代码对字符串进行编码:

        Cipher cipher = Cipher.getInstance(algorithm, "BC");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        encryptedString = new String(Base64.encode(cipher.doFinal(string.getBytes())));
    

    其中算法是aes。

    有什么线索吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   erickson    15 年前

    填充与键无关。

    在创建 Cipher ?


    如果您只是在字面上使用“aes”作为密码算法,那么您应该清楚地了解模式和填充。否则,加密提供者可以自由选择自己的一些默认值,这可能会因机器而异。

    推荐文章