跨語言調試RSA加密經驗

最近前端與後端使用了RSA加密對請求Body進行了加密。前端使用JS、後端使用PHP。通過閱讀js和php代碼,大致瞭解他們使用加密過程。但我們jmeter壓力和自動化時需要使用java代碼實現。參考前端和後端的代碼,很快寫了一個RSA java的代碼。但是在java按他們拼接參數去請求時,響應報參數錯誤。通過抓包獲取到前端正常的請求RSA java代碼能正常解密,響應也能解密。

原來參數加密時使用encodeBase64String方法,而不是encodeBase64URLSafeString方法。查到這個原因折騰了一天。

一般不同語言實現RSA加解:重點關注對象,如果多端加解密對應不上,請修改此處,更多細節參考node-rsa文檔,另一個即是加密字符編碼導致。

 

    public String publicEncrypt(String data) {
        try {
            Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
            //Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", PADDING);
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            
            return Base64.encodeBase64String(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength()));
            
            //return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength()));
        
        } catch (Exception e) {
            throw new RuntimeException("加密字符串[" + data + "]時遇到異常", e);
        }
    }
 

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