-1

私はJAVAを使っています 私の友人はSYMBIANを使っています

私と私の友人は同じ RSA モジュラスを持っています。公開鍵を使用してデータを暗号化すると、友人は同じものを復号化できます。しかし、友人が公開鍵でデータを暗号化すると、データを復号化できません。「データはゼロで開始する必要があります」というエラーが表示されました

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    byte[] encryptionByte = null;
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    encryptionByte = cipher.doFinal(encrptdByte);
    return encryptionByte;
}

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
    byte[] encryptionByte = null;
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);
    encryptionByte = cipher.doFinal(encrptdByte);

    System.out.println("Recovered String     :::  " + new String(encryptionByte));
}

ありがとうスニル

4

2 に答える 2

6

decrypt関数は使用します-それpublicKeyはどこから来ますか?公開鍵で暗号化されたデータは、同じ公開鍵ではなく、対応する秘密鍵で復号化する必要があることに注意してください。RSAなどの非対称暗号化には、ペア内の各キーが他のキーで暗号化されたデータを復号化できるキーペアの概念があります。これに対して、AESなどの対称暗号化では、同じキーが暗号化と復号化の両方で機能します。

于 2009-06-16T10:47:00.273 に答える
2

前の投稿を追加するには、非対称暗号化を使用してデータを大規模に暗号化/復号化することは実用的ではありません(対称暗号化よりも大幅に遅いため)。非対称暗号化(RSAなど)の最も実用的な使用法は、データの暗号化とメッセージダイジェストの安全なハッシュ(SHA-256など)に署名するために使用された対称鍵(AESまたは同様のアルゴリズムの場合)を暗号化することです。

暗号化されたメッセージは通常、暗号化されたメッセージと暗号化に使用されるキーを含む「封筒」に封印されます。もちろん、鍵は受信者の公開鍵で暗号化されるため、秘密鍵を所有している人だけが鍵を取得できます。

最後に、メッセージの送信者は、オプションでメッセージの安全なハッシュを計算し、送信者の秘密鍵で暗号化することができます。受信者は暗号化されたハッシュを(送信者の公開鍵を使用して)復号化し、計算されたハッシュと比較して送信者のIDを確認します。

于 2009-06-16T11:04:17.277 に答える