RSA加密解密的使用!

根據公司的要求需要對一些數據保密,所以與公司做後臺的開發人員進行對接測試,特此記錄:

在進行加密解密之前我也是網上進行了大量的資料查閱,感覺比較詳細的在此列出,以做參考(由於我這裏與該方法實現有所出入,所以自己另外寫了個方法):

http://blog.csdn.net/eyishion/article/details/51308786

我這邊的需求是這樣的:服務端創建公鑰=>客戶端(用服務端提供的公鑰對用戶名和密碼進行加密生成密文)=>服務端。

直接上代碼:

/**
 * 使用公鑰對obj進行加密返回密文
 * @obj            需要進行加密的字符串
 * @publicKeyStr   服務端獲取的公鑰
 * */
public static byte[] encodeByPublicKey(String obj, String publicKeyStr)
{
         byte[] result;
    try {
        byte[] bytes=new BASE64Decoder().decodeBuffer(publicKeyStr);
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(bytes);
        KeyFactory factory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
        Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encode = obj.getBytes();
        result = cipher.doFinal(encode);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
    return result;
}


在與服務端對接加解密的過程中遇到的幾個問題:

1.服務端以字符串形式傳過來公鑰,在解密的時候需要用base64轉成byte數組:  

     byte[] bytes=new BASE64Decoder().decodeBuffer(publicKeyStr);
2.服務端與android端加解密的方式不同導致不一致,需要設置客服端的加密方式,
博客:http://blog.csdn.net/u010670151/article/details/53006232有詳細講解: 
   Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
3.加密完成後的密碼需要轉成字符串的形式傳給服務端,需要使用Base64進行轉換:  
  String cliperText = (new BASE64Encoder()).encode(result);
java端編譯有自帶的base64,android這邊需要另行下載:BASE64_all.rar

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章