golang 中签名问题求助

2019-05-17 15:15:27 +08:00
 usufu

求助各位大神,java 当中的


RSAPrivateCrtKeySpec rsaPriKey = new RSAPrivateCrtKeySpec(modulus, publicExponent, privateExponent, primeP, primeQ, primeExponentP, primeExponentQ, crtCoefficient);
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey key = keyf.generatePrivate(rsaPriKey);

String input = "测试";
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(key);
signature.update(input.getBytes("utf-8"));

用 go 怎么实现,有没有相应的包?尤其是第一部分根据一堆参数生成 rsa key 的部分没有找到 go 怎么写。

1789 次点击
所在节点    问与答
4 条回复
neighbads
2019-05-17 15:39:44 +08:00
usufu
2019-05-17 16:27:19 +08:00
没找到该用那个方法
qwerthhusn
2019-05-17 17:34:31 +08:00
其实 RSA 私钥就两个字段 PrivateExponent 和 modules,只要有个这两个其他的就能算出来
usufu
2019-05-20 15:10:59 +08:00
研究了一下,解决了。记录如下:
```
pubkey := rsa.PublicKey{
N:Modulus,
E:int(Exponent.Int64()),
}

preValues := rsa.PrecomputedValues{
Dp:DP,
Dq:DQ,
Qinv:InverseQ,
}

priKey := rsa.PrivateKey{
PublicKey: pubkey,
D:D,
Primes: []*big.Int{P, Q},
Precomputed:preValues,
}
derBytes := x509.MarshalPKCS1PrivateKey(&priKey)
PrivateKey, _ := x509.ParsePKCS1PrivateKey(derBytes)

rand := rand.Reader
msg := []byte("the message to be signed...")
hashed := sha1.Sum(msg)
signbyte, err := rsa.SignPKCS1v15(rand, PrivateKey, crypto.SHA1, hashed[:])
if err != nil {
log.Fatal(err)
}
signature := base64.StdEncoding.EncodeToString(signbyte)
fmt.Println(signature)
expresult := `NDarItrQEHlpT6jAOmz/OgL/nahM1tesCQyN3NcYU8b+O0QPElP3hIQJlYklZnxJaoUZON+8Ja5R+b3lODcsXesRm81bypYCzF5sjPu8P2jvS4A4RE2T3+Pn+JRgUhu5ilxZcrCVYDt1buKcN5uC+VEb+ixSgvWQHY835UCGqow=`
if strings.Compare(signature, expresult) == 0 {
fmt.Println("signature correct...")
} else {
fmt.Println("Signature NOT correct...")
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/565072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX