我想达到的效果:
用rsa应该能实现吧?
已经解决了,感谢大家提供的建议和参考!
|  |      1z0ne OP 我对算法什么的不熟,好像是无法使用 rsa 公钥进行解密的(只能加密) 那么我要是想达到这个操作,怎么实现比较合适呢? | 
|  |      2allenforrest      2019-05-10 22:16:24 +08:00 何出此言? | 
|  |      3z0ne OP @allenforrest  我是想实现如下功能: 1. 我用“私钥”加密一段数据,发送给用户,当成程序的认证码 2. 程序中保存着“公钥”,这个”公钥“只能用来解密这段数据,解密后进行判断认证是否合法 期间这段认证码没有私钥是无法伪造生成的 用 rsa 算法能否实现呢? | 
|  |      4jiafaner      2019-05-10 22:19:22 +08:00 反了吧? | 
|      5ThirdFlame      2019-05-10 22:20:32 +08:00  1 所谓的加密和解密只是相对的。  数字签名认证,就是你使用你的私钥加密哈希值,传送给对方。 对方拿你的公钥解密后,得到哈希值,与传送内容的哈希值值进行比较。确定是不是你发送的。 你说有没有用到公钥解密。 | 
|  |      7z0ne OP @ThirdFlame  我是 想不止达到数字签名认证对比的功能,而是能读取解密出这个“签名”的数据~ | 
|      8luban      2019-05-10 22:22:07 +08:00 via iPhone  1 rsa 是可以公钥加密私钥解密,也可以私钥加密公钥解密 | 
|      9luban      2019-05-10 22:22:48 +08:00 via iPhone java 网上有很多例子,golang 没用过 | 
|      10kalista      2019-05-10 22:52:38 +08:00 网上挺多 go 调用 rsa 的,官方有 crypto 库 | 
|      11ThirdFlame      2019-05-10 23:15:03 +08:00 @z0ne   大哥 你把哈希值 当做明文,这不就是 私钥加密,公钥解密么 | 
|      12zealot0630      2019-05-10 23:24:58 +08:00 via Android 公钥是“公开的”,你这种方法毫无安全可言。 公开并不是说你不泄漏就不公开了,而是整个加密体系都围着公钥是公开的这个假设展开的,举例来说,公钥不会放在 sensitive memory 里面,比如你的程序 core dump 了,那么私钥是不会出现在 core dump 中,但是公钥就会。在使用公钥时候,不会考虑各种攻击,比如 time attack,等等因素,都会导致你的公钥非常容易泄露。 总而言之,不要这样做! | 
|      13zealot0630      2019-05-10 23:27:53 +08:00 via Android 看了你后面的描述,你需要的是签名功能,证明代码与数据的来源可靠,这是 RSA 的标准用法,google rsa sign 就可以了。加密在这里毫无意义。 | 
|      14zealot0630      2019-05-10 23:30:11 +08:00 via Android 如果你不想让你的程序明文在互联网上传输,请使用 TLS | 
|  |      15AlphaTr      2019-05-10 23:34:10 +08:00 via iPhone 你这功能叫签名和验签吧…… | 
|  |      16wangsongyan      2019-05-10 23:37:20 +08:00 via iPhone license ? | 
|  |      17z0ne OP | 
|  |      18z0ne OP @zealot0630  好像 RSA 只能“单向”的加密,也就是使用公玥解密,然后只能用私玥解开,但是我的需求是反的,想用私玥加密,只能用公玥解开 | 
|      190TSH60F7J2rVkg8t      2019-05-11 00:35:34 +08:00 via iPhone @z0ne 你需要两对公 /私钥 | 
|  |      21xyfan      2019-05-11 00:47:37 +08:00 via Android  1 我猜你想用 rsa 实现 license 的功能。感觉有点问题,公钥是公开的,默认所有人都能获取(即使写进程序里),所以你对数据的加密本质上没有用,因为所有人都可以用公钥进行解密,真正起作用的只有签名。应该把加密和签名分开,加密用其他算法,脱离签名用的公 /私钥对。 | 
|      22lzxgh621      2019-05-11 00:50:07 +08:00 via iPhone  1 不考虑安全的前提下,程序里的公私钥换一下位置就好。 | 
|  |      24Bryan0Z      2019-05-11 01:00:21 +08:00 via Android 看了眼你的需求,你要实现的功能不就是数字签名吗…一大堆库可以挑。RSA 私钥和公钥都可以用来加密,用私钥叫做签名,用公钥就真的是加密了 | 
|  |      25z0ne OP @xyfan  是的,我的本意就是想让所有带有公钥的程序都能够解密出我加密的信息(只能解密,而且这段信息只有我能加密,解密后的数据还做了一层校验,理论上来说没有私钥就无法伪造) | 
|  |      27Zzdex      2019-05-11 01:27:42 +08:00 via iPhone golang 官方库 | 
|  |      28Zzdex      2019-05-11 01:27:51 +08:00 via iPhone | 
|  |      29rrfeng      2019-05-11 01:32:33 +08:00 没问题,可以,官方库就能完成,自带 example | 
|  |      31zsj950618      2019-05-11 01:42:02 +08:00 | 
|  |      32Sylv      2019-05-11 03:24:26 +08:00 via iPhone 如果你是为了客户端验证的话,我认为最简单的方法是程序内嵌锁定证书,然后直接走 HTTPS 跟服务器验证,这样就能做到客户端和服务器之间的交流是加密且无法篡改伪造的了,没必要自己造轮子。 | 
|  |      33RecursiveG      2019-05-11 03:49:45 +08:00 via Android 非密码学专家建议用别人造好的轮子。https://en.wikipedia.org/wiki/Authenticated_encryption | 
|      34hearfish      2019-05-11 03:57:43 +08:00 这不就是数字签名么 公钥和私钥从数学上来讲是可以互换的(用一个加密以后可以用另一个解密) | 
|      35silentstorm      2019-05-11 07:48:20 +08:00 via Android 你搞反了吧,这是签名功能 | 
|      36hhhsuan      2019-05-11 08:04:53 +08:00 via Android 这不就是最基本的 RSA 加解密功能吗?随便找个 RSA 的库就能做啊。没看出你的需求有什么特殊的地方。 | 
|  |      37chinvo      2019-05-11 08:13:37 +08:00 via iPhone  1 防止伪造应该用签名,客户端收到的数据包含明文原文和签名,然后对签名进行校验 | 
|  |      38AlphaTr      2019-05-11 08:18:12 +08:00 via iPhone  1 可是还是一个数字签名,既然不考虑安全性,这部分数据就明文传输,还是用数字签名保证不被篡改就可以了 | 
|      39fangxing204      2019-05-11 08:27:17 +08:00 via Android 公钥是公开的, 用公开的密码去解密,那这个加密有什么意义? | 
|  |      40zhujinliang      2019-05-11 08:55:45 +08:00 via iPhone 可以参考 crypto/rsa 包的 EncryptOAEP 和 DecryptOAEP 两个例子 | 
|  |      41zhujinliang      2019-05-11 08:58:33 +08:00 via iPhone 没看明白楼主是想加密还是签名,签名的话是 SignPKCS1v15 和 VerifyPKCS1v15 两个例子 | 
|  |      42lzvezr      2019-05-11 09:07:44 +08:00 via iPhone 根据 RSA 的原理,完全可以"私钥"加密"公钥"解密,公钥私钥只是以使用方式区分命名而已,你用哪个加密哪个就是公钥 | 
|      43fbcskpebfr      2019-05-11 09:11:46 +08:00 via Android 楼主提出想法 A,但楼上很多人都在用“为什么 B 可行”来反驳“ A 为什么不可行”。 既然安全性是数学保证的,没什么不可以的 | 
|  |      44mengyaoss77      2019-05-11 09:11:57 +08:00 via Android 你自己用公钥加密,把私钥分发一下不就行了。 | 
|  |      45maggch      2019-05-11 09:20:54 +08:00 via Android 公钥私钥互为模 n 下的逆元,交换一下完全没问题。 | 
|  |      46mcfog      2019-05-11 09:38:56 +08:00 via Android 关键是你描述了半天签名的流程然后固执地说这不是签名我不要签名我就要加密 不是说数据变成一串 base64 就叫加密了的 | 
|  |      47opengps      2019-05-11 09:42:58 +08:00 概念有点乱:   公钥私钥,取决于你公开那个私有哪个 解密加密,你自己选取其中一个 | 
|  |      49z0ne OP | 
|  |      50mcfog      2019-05-11 10:48:41 +08:00 via Android  1 @z0ne 与其打这么多引号,不如先去查查找些术语分别是什么含义,不理解术语的含义连准确地表达你的疑问都做不到,所以大家只能先猜你懂啥(但说法不对)不懂啥然后尝试给一些答案出来 哦对,顺便这楼里也有很多人和你差不多状态,鸡同鸭讲 | 
|      52reself      2019-05-11 11:00:06 +08:00 via Android 这不就是签名么 | 
|      53reself      2019-05-11 11:01:22 +08:00 via Android 基础差又不愿去找资料学习 | 
|      54reself      2019-05-11 11:02:24 +08:00 via Android 别人给出了建议又不虚心去学习 |