gpt4 book ai didi

javascript - 从 Cryptico.js 中提取 RSA 私钥

转载 作者:行者123 更新时间:2023-11-30 10:08:52 27 4
gpt4 key购买 nike

我相信这是一个非常基本的问题,但我开始研究 JavaScript 和 RSA,所以我有点迷茫。我刚刚下载了库 Cryptico,它使我可以轻松使用 RSA key 生成/加密/解密。生成的 RSA key 的公共(public)部分,只需使用以下命令即可轻松提取:

publicKeyString(RsaKey)

这是:

my.publicKeyString = function(rsakey) 
{
pubkey = my.b16to64(rsakey.n.toString(16));
return pubkey;
}

rsakey.n 是在函数中生成 key 时定义的:

function RSAGenerate(B, E)
{
var rng = new SeededRandom();
var qs = B >> 1;
this.e = parseInt(E, 16);
var ee = new BigInteger(E, 16);
for (;;)
{
for (;;)
{
this.p = new BigInteger(B - qs, 1, rng);
if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
}
for (;;)
{
this.q = new BigInteger(qs, 1, rng);
if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;
}
if (this.p.compareTo(this.q) <= 0)
{
var t = this.p;
this.p = this.q;
this.q = t;
}
var p1 = this.p.subtract(BigInteger.ONE);
var q1 = this.q.subtract(BigInteger.ONE);
var phi = p1.multiply(q1);
if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0)
{
this.n = this.p.multiply(this.q);
this.d = ee.modInverse(phi);
this.dmp1 = this.d.mod(p1);
this.dmq1 = this.d.mod(q1);
this.coeff = this.q.modInverse(this.p);
break;
}
}
}

但是 key 的私钥部分,我就是看不懂怎么提​​取,所以我可以保存公钥/私钥部分,以备后用。

图书馆文件: https://github.com/wwwtyro/cryptico

最佳答案

RSA 的定义方式是公钥中包含的值构成私钥中包含的值的子集。所以你的私钥已经是 rsakey。其他公钥方案的工作方式不同,其中公钥和私钥值完全不同。

此外 rsakey.n 没有完全定义公钥。您至少需要公共(public)指数 e。它通常被简单地设置为 65537,因此如果您永远不需要更改 key 或升级方案,这可能是硬编码的。它是 RSAGenerate 中的 E。在这种情况下被忽略,because

A (seeded) random RSA key is generated with Tom Wu's RSA key generator with 3 as a hard-coded public exponent.

您可以选择与公钥类似的私钥编码,但由于它必须包含多个值,所以我选择了 JSON 序列化:

(function(c){
var parametersBigint = ["n", "d", "p", "q", "dmp1", "dmq1", "coeff"];

c.privateKeyString = function(rsakey) {
var keyObj = {};
parametersBigint.forEach(function(parameter){
keyObj[parameter] = c.b16to64(rsakey[parameter].toString(16));
});
// e is 3 implicitly
return JSON.stringify(keyObj);
}
c.privateKeyFromString = function(string) {
var keyObj = JSON.parse(string);
var rsa = new RSAKey();
parametersBigint.forEach(function(parameter){
rsa[parameter] = parseBigInt(c.b64to16(keyObj[parameter].split("|")[0]), 16);
});
rsa.e = parseInt("03", 16);
return rsa
}
})(cryptico)

关于javascript - 从 Cryptico.js 中提取 RSA 私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com