最近,我试图用ECDSA的代码做点什么。我想改变它的密钥长度但是徒劳无功。我检查了互联网并找到了一些ECDSA的源代码,但不知怎的,它只允许32个字节。
例如,我发现了这个:
var crypto = require("crypto");
var eccrypto = require("eccrypto");
// A new random 32-byte private key.
var privateKey = crypto.randomBytes(32);
// Corresponding uncompressed (65-byte) public key.
var publicKey = eccrypto.getPublic(privateKey);
var str = "message to sign";
// Always hash you message to sign!
var msg = crypto.createHash("sha256").update(str).digest();
eccrypto.sign(privateKey, msg).then(function(sig) {
console.log("Signature in DER format:", sig);
eccrypto.verify(publicKey, msg, sig).then(function() {
console.log("Signature is OK");
}).catch(function() {
console.log("Signature is BAD");
});
});
来自this网站。我试图将privateKey从32个字节更改为16个字节和其他值。它最终给了我错误。
最近我发现要有不同的密钥长度,你需要不同的曲线。有人知道如何改变上面代码中的曲线吗?如果没有,有人会提供可以使用不同密钥长度的ECDSA的源代码吗?
(我对ECC很新,所以如果我使用错误的术语或者我完全误解了它的概念,请原谅)。
答案 0 :(得分:1)
根据https://github.com/bitchan/eccrypto#implementation-details(看起来像您的代码的正确库),该库仅支持secp256k1
曲线。
如果除了曲线为256位曲线空间之外没有任何上下文,大多数其他库将假设它是secp256r1
(r而不是k),这意味着您选择的库不能互操作有很多图书馆。 (例如,Windows 7,8和8.1无法使用操作系统提供的加密库执行secp256k1
)
因此对于"如何在此库中使用不同大小的键?"答案是"你不能,抱歉"。对于"我可以使用哪个库?"答案是#34;抱歉,这超出了StackOverflow"的范围。