我想分發加密郵件,只有我可以加密,但每個人都可以解密。我正在使用以下代碼來執行任務。它的工作原理,但我想知道它是否有任何安全問題?使用RSA私鑰加密郵件是否安全
我知道正常的用法是使用RSA公鑰進行加密和私鑰解密(但我的用例是相反的)。另外我不想在這裏使用java.security.Signature。
用例: 我想通過電子郵件將配置文件從服務器發送到客戶端,而收件人無法以明文形式讀取配置。安裝過程中擁有服務器公鑰的應用程序將能夠在配置文件導入配置目錄後解密該配置文件。
public static final String ALGORITHM = "RSA/ECB/PKCS1Padding";
public Cipher createCipher(final int encryptionMode, final Key key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
final Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(encryptionMode, key);
return cipher;
}
public byte[] encryptString(final String text, final PrivateKey privateKey) throws GeneralSecurityException, IOException {
return createCipher(Cipher.ENCRYPT_MODE, privateKey).doFinal(text.getBytes("UTF-8"));
}
public String decryptString(final byte[] msg, final PublicKey publicKey) throws GeneralSecurityException, IOException {
final byte[] decrypted = createCipher(Cipher.DECRYPT_MODE, publicKey).doFinal(msg);
return new String(decrypted, "UTF-8");
}
// me
final PrivateKey privateKey = ... read from file ...
final byte[] msg = encryptString("my-secret-text-that-everybody-can-read-but-only-I-can-generate", privateKey);
// other person
final PublicKey publicKey = ... read from file ...
final String text = decryptString(msg, publicKey));
*「我也不想在這裏使用java.security.Signature」*爲什麼?這就是你應該在這裏使用,如果你想簽署的東西。這就是你在這裏做的不是嗎? –
你想使用*數字簽名*,但你不想使用這個類,爲什麼? – meskobalazs
因爲我從我的服務器發送配置文件到我的應用程序,我不希望普通用戶以明文形式閱讀它或能夠修改它。 – k1r0