2

私はしばらくの間、この問題と戦ってきました。問題は、PEM 文字列をサーバーに送信する必要があることです。サーバーは、次の最終ステップを期待しています。

  • タイプ 3DES または AES-256 の暗号化キー。
  • そのキーは、RSA キーで暗号化されています。
  • その出力は、Base64 および PEM 形式でエンコードされています。

これが私がこれまでに得たものです:

  • サーバーから取得した RSA キーに基づいて、Cipher を作成します。

     Cipher rsa = Cipher.getInstance("RSA");
    
     rsa.init(Cipher.ENCRYPT_MODE, (RSAPublicKey) obj);
    
  • 後で、AES キーを作成します。

    //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:エラー:0906D06C:PEM ルーチン:PEM_read_bio:開始行がありません:.\crypto\pem\pem_lib.c:698:

エラーの可視性はあまりありませんが、エラーは PEM の認識の欠如に関連しているように見えるため、プロセスで何か問題があるかどうかを確認したかったのです。

ご不明な点がございましたら、お知らせください。

ありがとう!

4

1 に答える 1

2

BEGINダッシュとステートメントの間にスペースがあってはならないため、特定のエラーが報告されます。他の問題についてはわかりませんが、入力要件を正確に一致させるために、いくつかの作業が予定されているようです。何が期待されているかを正確に理解していることを確認してください。

于 2012-12-05T21:34:56.057 に答える