0

String 形式の RSA 公開鍵があり、これを使用して Base 64 で文字列を暗号化したいと考えています。これに使用しているコードは次のとおりです。

function encrypt(String pin){ 
  String key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiOnM5t6w2ZD6dpA4/MzSTAOt0IYpnsmGSAIfIVgGntI+fI4wbvUvMIhaLN3fHrjyuNGFdYw+yuoXYkapajt6VTZJniaatSiq6bwQ7R0UAop6haFSAwjnmReqexJvcKyqUsTfcfFypPpsYRewh/48/jmc/6ND+ugxDd52prkPUrbj+nnO0z3DBoUCpgDMRvW2hWXv6kZ654gp+wIAQnxbdwRMy6FZbrHjkA3tc6U0CHK+KjxAfzWAK+yI+ofskM4qk50J7y9hUZ7lLikqWZWKiqh8xiDk1kgu+FIjVh+fylKpa3gWmPPn0fSpBJjuenc1OQVmZ718a3388DjzFlYOLwIDAQAB";
  byte[] sigBytes2 = Base64.decode(key, Base64.DEFAULT);
  Log.d("WS", "new key is: " + key);
  try {
    PublicKey publicKey = KeyFactory.getInstance("RSA")
        .generatePublic(new X509EncodedKeySpec(sigBytes2));
    encryptedBase64PIN = encode(publicKey, pin);
    Log.d("WSA", "encoded key is: " + encryptedBase64PIN);
    // getSecToken();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

public static String encode(Key publicKey, String data)
    throws NoSuchAlgorithmException, NoSuchPaddingException,
    InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

  byte[] byteData = data.getBytes(); // convert string to byte array

  Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");       
  cipher.init(Cipher.ENCRYPT_MODE, publicKey);      
  byte[] encryptedByteData = cipher.doFinal(byteData);

  String s = Base64.encodeToString(encryptedByteData, Base64.NO_WRAP);
  return s; // convert encrypted byte array to string and return it
}

同じ出力をサーバーに送信すると、「PIN を解読できません」と表示されます。どうしてこれなの?

4

1 に答える 1

1

同じ出力をサーバーに送信すると、「PIN を解読できません」と表示されます。どうしてこれなの?

これには多くの理由が考えられます。サーバーの復号化のコードをお持ちの場合は、質問に追加してください。

理由は次のとおりです。

  • 暗号化モードが正しくありません。選択しましRSA/ECB/NoPaddingたが、サーバーが何か他のものを期待している可能性がありますか?

  • Base64 エンコーディング - サーバーは確実にこれを期待していますか?

  • メッセージは「PIN を解読できません」です。暗号化するのが PINの場合、dataASCII バイトを暗号化する必要がありますか?

于 2012-11-05T09:25:37.287 に答える