SecureRandom生成“强随机数”用于生成RSA*公钥/私钥*window和linux下不一致的问题

在服务启动时生成的RSA密钥对因SecureRandom的使用在Windows和Linux环境下不一致,导致解密异常。通过指定SecureRandom参数,确保生成相同的密钥对。经过多次修改,最终实现跨平台兼容,并将密钥对存储到数据库中以提高安全性。
摘要由CSDN通过智能技术生成

1.先说下问题:
由于我们的服务部署环境是两台服务器,在服务启动时生成RSA密钥对。这有一个问题:当两台机器分别启动时,生成了不同的密钥对。而当客户端需要用到RSA加解密的时候,链接可能会被负载到另一台机器上,造成解密失败,抛出异常。

2.看下之前的代码(第1版):

private static final KeyPair keyPair = initKey();

            private static KeyPair initKey() {
                    try {
                            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
                            SecureRandom random = new SecureRandom();
                            KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
                            generator.initialize(512, random);
                            return generator.generateKeyPair();
                    } catch (Exception e) {
                            throw new RuntimeException(e);
                    }
            }

其中SecureRandom random = new SecureRandom();在生成强随机数时,没有指定任何参数。所以生成的随机数是无法控制的。通过查询API,发现另一个构造方法new SecureRandom(byte[] b),继而可以通过指定固定参数,返回固定的SecureRandom对象。故改出第2版:

  private static final KeyPair keyPair = initKey();

            private static KeyPair initKey() {
        
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值