java实现生成RSA公私钥、SHA256withRSA加密以及验证工具类_rsa-sha256 keylength java

/\*\*

* 通过私钥对参数进行加密
*
* @param Data
* @param privateKey
* @return
*/
public static String MakeSign(String Data, String privateKey) {
try {
byte[] data = Data.getBytes();
byte[] keyBytes = base64String2Byte(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);

        KeyFactory keyFactory = KeyFactory.getInstance(KEY\_ALGORITHM);

        PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
        //这个根据需求填充SHA1WithRSA或SHA256WithRSA
        Signature signature = Signature.getInstance(SIGNATURE\_ALGORITHM);
        signature.initSign(priKey);
        signature.update(data);
        return byte2Base64String(signature.sign());
    } catch (Exception e) {
        return "";
    }
}

/\*\*

* 使用公钥
*
* @param Data_ori
* @param Singnature
* @param publicKeyBase64Str
* @return
*/
public static boolean VeriSign(String Data_ori, String Singnature, String publicKeyBase64Str) {
try {
byte[] signed = base64String2Byte(Singnature);

        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(base64String2Byte(publicKeyBase64Str));
        KeyFactory keyFactory = null;
        keyFactory = KeyFactory.getInstance(KEY\_ALGORITHM);
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        //这个根据需求填充SHA1WithRSA或SHA256WithRSA
        Signature signature = Signature.getInstance(SIGNATURE\_ALGORITHM);
        signature.initVerify(publicKey);
        signature.update(Data\_ori.getBytes(StandardCharsets.UTF\_8));
        return signature.verify(signed);
    } catch (Exception e) {
        return false;
    }
}

/\*\*

* base64字符串转字节数组
*
* @param base64Str
* @return
*/
public static byte[] base64String2Byte(String base64Str) {
return Base64.decodeBase64(base64Str);
}

/\*\*

* 字节数组转base64字符串
*
* @param bytes
* @return
*/
public static String byte2Base64String(byte[] bytes) {
return new String(new Base64().encode(bytes));
}

public static byte charToByte(char c) {
    return (byte) "0123456789ABCDEF".indexOf(c);
}

}


工具类全文如上所示,接下来看看效果




---


测试代码




---



public static void main(String[] args) throws Exception {
log.info(“-----开始生成公钥和私钥-----”);
Map<String, String> keys = createRSAKeys();
log.info(“-----公钥base64:{}-----”, keys.get(PUBLIC_KEY));
log.info(“-----私钥base64:{}-----”, keys.get(PRIVATE_KEY));

    log.info("-----开始对数据进行加密-----");
    String data = "hello word !";
    log.info("-----源数据:{}-----", data);
    String sign = RsaUtil.MakeSign(data, keys.get(PRIVATE\_KEY));
    log.info("-----私钥加密结果:{}-----", sign);

    log.info("-----开始用公钥对私钥的加密验证-----");
    log.info("-----公钥验证结果:{}-----", VeriSign(data, sign, keys.get(PUBLIC\_KEY)));

}



---


测试结果





# 惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

![image.png](https://img-blog.csdnimg.cn/img_convert/0720b834ebf20ae54cbf0b15c57f831e.webp?x-oss-process=image/format,png)


![image.png](https://img-blog.csdnimg.cn/img_convert/fcd72e9057b97ae81c790c8abe3cd994.webp?x-oss-process=image/format,png)


加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
6Snz-1725664347663)]


[外链图片转存中...(img-Lz74nVpM-1725664347663)]


加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值