片段一:
byte[] keyBytes = Base64Util.decodeBase64(privateKey);//對私鑰做base64解碼
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(priKey);
signature.update(data);//data為要生成簽名的源數(shù)據(jù)字節(jié)數(shù)組
return Base64Util.encodeBase64(Base64Util.encodeBase64(signature.sign()).getBytes());
片段二:
byte[]publicKey=Base64Util.decodeBase64(publicKey);//對提供的公鑰做base64解碼
byte[] sign= Base64Util.decodeBase64(Base64Util.decodeBase64(sign))//簽名需要做二次base64解碼
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initVerify(pubKey);
signature.update(data);
return signature.verify(sign);
頭大。
太長就不寫了, 參考這個吧, 注意你上面那個做了兩次b64e和b64d的操作就好
https://blog.csdn.net/panjiapengfly/article/details/75318930