簡體   English   中英

從公鑰.pem格式加密rsa android

[英]encrypt rsa android from public key .pem format

我已經在許多stackoverflows帖子中徘徊了,但仍然無法弄清楚我的代碼有什么問題。

public class KripAsim {
String hasil;

public String encrypt(String text) {
    try {

        String PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvCNqSslgCndo8vfNrkXFDLXmst024Oi8D7LEiJFjYBva4kBKKISe8rKp58kCLLHjv90RN+Dy2KWcf0eFkKaqc3zILBI99JhV1z8TFOzmt5dfgW6fD1ucBfsK6pWxK84DddyOqKldwHlReqjuDHT2jLue51vpXaCa12WV5bMnGsfy3vZKnp699YCguqRpTR1MijZ9pz8WqldrR0a/DCaq5YxZ7lvjwuWIodQy3S3XRHAaeaUrFHFFLumzXAGuP447oRYR0p+1qsy8+wOtrsGm8m8bMg+C1XGMblkODtOFHz3wtrRZ5OwzgEm7J7odmSX8mSYBZYLcnUVqIFRsQkZLiwIDAQAB";

        byte [] decoded = Base64.decode(PUBLIC_KEY,Base64.NO_WRAP);
        KeyFactory keyFac = KeyFactory.getInstance("RSA");
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);

        PublicKey pubkey = keyFac.generatePublic(keySpec);

        Cipher rsa;
        rsa = Cipher.getInstance("RSA");
        rsa.init(Cipher.ENCRYPT_MODE, pubkey);
        hasil = Base64.encodeToString(rsa.doFinal(text.getBytes("UTF-8")),Base64.NO_WRAP);
        return hasil;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return hasil;

}
}

它返回null。 請幫忙。 提前致謝

PublicKey pubkey = keyFac.generatePublic(keySpec); 拋出InvalidKeySpecException,因為當您應該提供X509EncodedKeySpec時,您錯誤地提供了PKCS8EncodedKeySpec

您還應該在Cipher.getInstance()方法中完全指定轉換字符串。 下面的代碼片段說明了這一點:

byte[] decoded = Base64.decode(PUBLIC_KEY, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decoded);

PublicKey pubkey = KeyFactory.getInstance("RSA").generatePublic(keySpec);
Cipher rsa = Cipher.getInstance("RSA/ECB/OAEPwithSHA-256andMGF1Padding");
rsa.init(Cipher.ENCRYPT_MODE, pubkey);
String hasil = Base64.encodeToString(rsa.doFinal(text.getBytes("UTF-8")),
                                     Base64.NO_WRAP);
return hasil;

最后,您應該避免直接使用RSA加密數據。 正確的方法是使用一種混合加密方案,在該方案中,使用隨機生成的AES密鑰使用塊密碼(例如,GCM模式下的AES)對數據進行加密,然后使用RSA對該密鑰進行加密。 周圍有許多示例可供參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM