1. 程式人生 > >android RSA公鑰加密 公鑰解密,解決亂碼問題

android RSA公鑰加密 公鑰解密,解決亂碼問題

/**
 * <p>
* 公鑰解密
 * </p>
*
 * @param encryptedData 已加密資料
 * @param  publicKey  公鑰 (無需base64編碼,靠,網上的程式碼為毛說要base64編碼,坑啊哥哥們)* @return  (已解決解密亂碼問題)
* @throws Exception
 */
public static byte[] decryptByPublicKey(byte[] encryptedData,String publicKey )
        throws Exception {X509EncodedKeySpec x509KeySpec = new 
X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicK = keyFactory.generatePublic(x509KeySpec); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, publicK); int inputLen = encryptedData.length; ByteArrayOutputStream out = new
ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 對資料分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); } else { cache = cipher.doFinal(encryptedData,
offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return decryptedData; }
/**
 * <p>
* 公鑰加密
 * </p>
*
 * @param data      源資料
 * @param
* @return
* @throws Exception
 */
public static byte[] encryptByPublicKey(byte[] data,String publicKey)
        throws Exception {    byte[] keyBytes = Base64.decode(publicKey, Base64.DEFAULT);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicK = keyFactory.generatePublic(x509KeySpec);
// 對資料加密
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicK);
    int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
    int offSet = 0;
    byte[] cache;
    int i = 0;
// 對資料分段加密
while (inputLen - offSet > 0) {
        if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
            cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
            cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
        out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
    byte[] encryptedData = out.toByteArray();
out.close();
    return encryptedData;
}

注:本方法中base64為util包下  
 android.util.Base64;
另外:方法中公鑰 為"ASDFG"這種  ,網上有好多公鑰前後有---BIGIN   END—— 這種,在本文中並不適用。
本人菜鳥,不知道問什麼,求告知