跨语言调试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);
        }
    }
 

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