RSA 加密使用记录 过程中遇到的问题
##(问题都是小白不懂 一起调试完毕)
首先接口文档中明确指出要使用RSA加密传输 并且data形式传递数据、
在调试时发现我们这是用的RSA签名 :
所以签名只需要 对数据进行签名 拿到数据进行验签就行(一般都是私钥签名 公钥来验签)
而加密是对传输数据进行加密 接受到的数据进行解密处理 (一般都是公钥加密 私钥解密)
这是具体签名和加密的区别很详细:
https://blog.csdn.net/weixin_30827565/article/details/99735869
第一步 需要调试RSA签名 对传输的JSON数据进行打包签名
(这边调试只能对数据签名之后进行验证 通过接口响应来判断是否签名成功)
调试使用的私钥是后台人员给的用来签名
调试过程中知道签名有对应的签名算法的:
Signature Sign = Signature.getInstance(SIGNATURE_ALGORITHM);
//SIGNATURE_ALGORITHM 这里就是SHA256withRSA
SHA224withRSA
SHA256withRSA
SHA384withRSA
SHA512withRSA
RIPEMD128withRSA
RIPEMD160withRSA
我调试使用的SHA256withRSA 签名算法在调接口时成功地,这就已经成功一半了 , 然后进行数据验签
(验签过程就好说了 ,只需要对接口响应的签名数据 进行验签就行 结果为true就OK)
注意:签名是用什么签名算法 验签也得使用相应的算法 所以我验签也是用SHA256withRSA
贴代码:
签名代码----------
/**
* 私钥签名
*requestData 传递给接口的data数据 以json数据传递
*
* */
public static String signRSA(String requestData){
String signature =null;
byte[] signed =null;
try{
PrivateKey privateKey =getPrivateKey();
Signature Sign = Signature.getInstance(SIGNATURE_ALGORITHM);
//SIGNATURE_ALGORITHM 签名算法 SHA256withRSA
Sign.initSign(privateKey);
Sign.update(requestData.getBytes());
signed = Sign.sign();
// signature = Base64.getEncoder().encodeToString(signed);
signature = Base64Util.encode(signed);//注意: 我们义务需求需要签名后进行base64编码 所以这段可根据具体使用情况
System.out.println("===签名结果:"+signature);
}catch(Exception e){
e.printStackTrace();
}
return signature;
}
验签代码----------
/**
*
* 公钥验签
*
* */
/**
* 通过公钥验签
* @param content 验签内容(json数据)
* @param sign 签名
* @return 验签结果
*/
public static boolean verifySignByPublicKey(String content, String sign) {
try {
PublicKey pubKey = getPublicKey();//公钥验签
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(pubKey);
signature.update(content.getBytes(StandardCharsets.UTF_8));
return signature.verify(Base64.decodeBase64(sign.getBytes(StandardCharsets.UTF_8)));
} catch (Exception e) {
// log.warn("sign error, content: {}, sign: {}, pubKey: {}", content, sign, publicKey);
// log.error("sign error", e);
}
return false;
}
这就是我调试时的一个过程,其实第一次过程也是很坎坷的,看着没有一点技术含量的东西,但是第一次搞从0开始 后面可能会遇到更多的场景 就稍微有点经验了。
小白在不断发展中 希望一起加油吧!!!!
有大佬有什么好的建议和指导欢迎留下言哈, 谢谢