这个操作怎么实现:使用 rsa 私钥加密数据,然后 rsa 公钥解密(并不是数字签名认证,最好是 golang 实现)

2019-05-10 22:08:13 +08:00
 z0ne
4467 次点击
所在节点    问与答
54 条回复
xyfan
2019-05-11 00:47:37 +08:00
我猜你想用 rsa 实现 license 的功能。感觉有点问题,公钥是公开的,默认所有人都能获取(即使写进程序里),所以你对数据的加密本质上没有用,因为所有人都可以用公钥进行解密,真正起作用的只有签名。应该把加密和签名分开,加密用其他算法,脱离签名用的公 /私钥对。
lzxgh621
2019-05-11 00:50:07 +08:00
不考虑安全的前提下,程序里的公私钥换一下位置就好。
lzxgh621
2019-05-11 00:52:28 +08:00
Bryan0Z
2019-05-11 01:00:21 +08:00
看了眼你的需求,你要实现的功能不就是数字签名吗…一大堆库可以挑。RSA 私钥和公钥都可以用来加密,用私钥叫做签名,用公钥就真的是加密了
z0ne
2019-05-11 01:05:21 +08:00
@xyfan
是的,我的本意就是想让所有带有公钥的程序都能够解密出我加密的信息(只能解密,而且这段信息只有我能加密,解密后的数据还做了一层校验,理论上来说没有私钥就无法伪造)
z0ne
2019-05-11 01:13:19 +08:00
@lzxgh621 感谢,我搜索了一圈没搜到之前 v2 的帖子,可能是关键词没用好。 我再研究研究
Zzdex
2019-05-11 01:27:42 +08:00
golang 官方库
Zzdex
2019-05-11 01:27:51 +08:00
rrfeng
2019-05-11 01:32:33 +08:00
没问题,可以,官方库就能完成,自带 example
zhy0216
2019-05-11 01:35:52 +08:00
@z0ne 加密的信息里包含私钥的公钥 公钥解密后检验和那段公钥是否匹配
zsj950618
2019-05-11 01:42:02 +08:00
官方库可以实现私钥加密,但没有实现公钥解密。参考官方库里的实现自己写了一下,见

https://play.golang.org/p/CR2z1RNlagX
Sylv
2019-05-11 03:24:26 +08:00
如果你是为了客户端验证的话,我认为最简单的方法是程序内嵌锁定证书,然后直接走 HTTPS 跟服务器验证,这样就能做到客户端和服务器之间的交流是加密且无法篡改伪造的了,没必要自己造轮子。
RecursiveG
2019-05-11 03:49:45 +08:00
非密码学专家建议用别人造好的轮子。https://en.wikipedia.org/wiki/Authenticated_encryption
hearfish
2019-05-11 03:57:43 +08:00
这不就是数字签名么

公钥和私钥从数学上来讲是可以互换的(用一个加密以后可以用另一个解密)
silentstorm
2019-05-11 07:48:20 +08:00
你搞反了吧,这是签名功能
hhhsuan
2019-05-11 08:04:53 +08:00
这不就是最基本的 RSA 加解密功能吗?随便找个 RSA 的库就能做啊。没看出你的需求有什么特殊的地方。
chinvo
2019-05-11 08:13:37 +08:00
防止伪造应该用签名,客户端收到的数据包含明文原文和签名,然后对签名进行校验
AlphaTr
2019-05-11 08:18:12 +08:00
可是还是一个数字签名,既然不考虑安全性,这部分数据就明文传输,还是用数字签名保证不被篡改就可以了
fangxing204
2019-05-11 08:27:17 +08:00
公钥是公开的, 用公开的密码去解密,那这个加密有什么意义?
zhujinliang
2019-05-11 08:55:45 +08:00
可以参考 crypto/rsa 包的 EncryptOAEP 和 DecryptOAEP 两个例子

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

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

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

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

© 2021 V2EX