gpt4 book ai didi

Java - 使用 RSA key 加密

转载 作者:行者123 更新时间:2023-11-30 09:29:09 25 4
gpt4 key购买 nike

我已经为这个问题纠结了一段时间。问题是我必须将 PEM 字符串发送到服务器,服务器需要执行以下最后一步:

  • 3DES 或 AES-256 类型的加密 key 。
  • 该 key ,使用 RSA key 加密。
  • 该输出以 Base64 和 PEM 格式编码。

这是我到目前为止得到的:

  • 基于我从服务器获得的 RSA key ,我创建了一个密码:

     Cipher rsa = Cipher.getInstance("RSA");

    rsa.init(Cipher.ENCRYPT_MODE, (RSAPublicKey) obj);
  • 稍后,我创建一个 AES key :

    //IV. 
    byte[] bytes = new byte[16];
    SecureRandom random = new SecureRandom();
    random.nextBytes(bytes);

    Map<String, byte[]> aes = new HashMap<String, byte[]>();

    aes.put("IV", ConversionUtil.toHex(bytes, 8).getBytes());

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");

    keyGen.init(256);
    Key encryptionKey = keyGen.generateKey();

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new IvParameterSpec(ConversionUtil.toHex(bytes, 8).getBytes()));

    aes.put("key", cipher.doFinal(encryptionKey.getEncoded()));

使用所有这些来创建 PEM 字符串:

            StringBuilder sb = new StringBuilder();
sb.append(StringUtils.repeat("-", 5));
sb.append("BEGIN PEM file");
sb.append(StringUtils.repeat("-", 5));
sb.append("\n");

sb.append("Proc-Type: 4,ENCRYPTED\n");
sb.append("DEK-Info: " + "AES-256-CBC" + "," + new String(aes.get("IV")) + "\n");
sb.append("");
sb.append(Base64.encode(rsa.doFinal(aes.get("key"))));

sb.append("\n");
sb.append(StringUtils.repeat("-", 5));
sb.append("END PEM file");
sb.append(StringUtils.repeat("-", 5));

然后将其发送到服务器,服务器会抛出以下错误:

3936:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:698:

我没有更多的错误可见性,但我想检查我在这个过程中是否有任何错误,因为错误似乎与 PEM 的无法识别有关。

如果您有任何问题,请告诉我。

谢谢!

最佳答案

报告特定错误是因为破折号和BEGIN 语句之间不应有空格。我不知道其他问题,但似乎您还有一些工作要做才能满足确切的输入要求。确保您准确地理解预期的内容,否则您可能不得不“令人作呕”地尝试不同的格式。

关于Java - 使用 RSA key 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com