You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于相同逻辑生成的两组SHA1密钥对相等性校验不通过,原因是什么?

基于相同逻辑生成的两组SHA1密钥对相等性校验不通过,原因是什么?

看起来你是想通过固定的keySeed重复生成相同的密钥对,但实际校验没通过对吧?我来帮你梳理下最可能的几个原因:

  • SecureRandom没有用keySeed初始化:这是最常见的问题!你现在只是获取了SHA1PRNG实例,但没有把生成好的keySeed传给它做初始化。默认情况下,SecureRandom会从系统的随机熵源(比如系统硬件随机数、进程状态等)自动生成初始种子,两次运行的初始状态完全不同,自然生成的密钥对也不一样。你需要在获取实例后立刻调用random.setSeed(keySeed);,强制让随机生成器基于你指定的种子启动。

  • 代码截断部分可能存在额外随机逻辑:你的代码在throw new RuntimeExcep...这里截断了,会不会在后续的密钥对生成逻辑里,还引入了其他随机因素?比如生成密钥时有没有传入其他未固定的参数,或者对keySeed做了额外的动态处理?这也会导致两次生成的结果不一致。

  • SHA1PRNG的JVM实现差异(小概率):不同厂商的JVM(比如Oracle JDK和OpenJDK)对SHA1PRNG的实现细节可能略有不同,但如果是在同一个环境下测试,只要种子正确设置,这个问题基本不会出现。

你的核心代码片段:

var arg1="65cfa78989387ca19f18d1d54af0d45dfb8fd9ee";
var arg2="783C82C2E6394A329A8149564E1B6AB74AA70FBD";
var keySeed=Sovereignty.bitwiseXor(Sovereignty.hexStringToByteArray(arg1),Sovereignty.hexStringToByteArray(arg2));

SecureRandom random;
try{
    random=SecureRandom.getInstance("SHA1PRNG");
}catch(NoSuchAlgorithmException x){
    throw new RuntimeExcep...

给你一个修正后的关键代码示例,补上种子初始化步骤:

var arg1="65cfa78989387ca19f18d1d54af0d45dfb8fd9ee";
var arg2="783C82C2E6394A329A8149564E1B6AB74AA70FBD";
var keySeed=Sovereignty.bitwiseXor(Sovereignty.hexStringToByteArray(arg1),Sovereignty.hexStringToByteArray(arg2));

SecureRandom random;
try{
    random=SecureRandom.getInstance("SHA1PRNG");
    random.setSeed(keySeed); // 必须加上这一步,固定初始种子
}catch(NoSuchAlgorithmException x){
    throw new RuntimeException("Failed to get SHA1PRNG instance", x);
}
// 后续用这个random实例生成密钥对,两次运行应该就能得到相同的结果了

备注:内容来源于stack exchange,提问作者8483315

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:03:09