首页
社区
课程
招聘
[求助]关于用Ms的CryptoAPI做RSA加密的疑问
2009-6-21 14:47 18584

[求助]关于用Ms的CryptoAPI做RSA加密的疑问

2009-6-21 14:47
18584
我用CryptGenKey ,用CryptExportKey导出私钥与公钥,然后用CryptEncrypt 加密,另外一个程序用CryptAcquireContext 创建一个容器,再用CrypImportKey导入公钥解密,结果本机成功,其它机器失败,我看了一下微软的说明,好象是用的公钥加密,私钥解密,我导入私钥再解密,确实成功了,问题在于,我就是想用私钥来加密,用公钥来解密,请问一下有没有大牛知道怎么解决这个问题。
注:请不要介绍不用CryptoAPI的办法

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (14)
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lingyu 1 2009-6-21 21:36
2
0
“我就是想用私钥来加密,用公钥来解密。”
在CryptoAPI里无法实现,除非自己写函数。
并且也没有这样做的必要,因为“用私钥来加密,用公钥来解密”
这样等于没有加密。
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
Yangs 2009-6-21 23:32
3
0
用私钥来加密,用公钥来解密.

感觉应该算是签名,但是加密的不应该是数据,而是数据散列。
雪    币: 423
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sdhzdmzzl 2009-9-3 10:52
4
0
我最近也在做这块,其实用私钥加密,用公钥解密是为了验证发行方的身份,如果加密的内容有一定的格式,解密出来的内容符合这个格式一般就能够认为是那个私钥进行的加密,进而实现身份的认证。而如果这个公钥并不是放在CA那而是通过一些手段分发到客户端的话,而客户端能够有限程度上地保护这个密钥,那么也能实现局部的安全。
雪    币: 423
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sdhzdmzzl 2009-9-3 10:54
5
0
请问楼主,你是怎么实现导出私钥的啊?好像msdn上说只能导出公钥。
另外,CryptEncrypt 这个函数msdn里就说了是用公钥加密,私钥解密的,不知道楼主是不是有了解决办法实现了私钥加密、公钥解密。不行的话,就换用crypto++了
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jeffcjh 2009-9-4 22:02
6
0
RSA的公钥和私钥是相对的,其实加密指数e和解密指数d两者有对称性,所以LZ想要“用私钥来加密,用公钥来解密”完全是可以的,只是确如lingyu所言,CryptAPI不支持这样做。但是换个思路还是可以的,比如将e和d互换,即可实现LZ的目的。
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-5 00:56
7
0
互换之后,实质还是一样的。还不是变成用公钥加密,私钥解密。不知道楼主想实现这个做什么呢?
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pengmo 2012-7-19 11:25
8
0
这个有办法实现吗? 只有公钥加密,私钥解密才能保护软件.
其他的crypt库好像也都不能实现的.

我的保护想法是: 将软件需要的一些数据用私钥加密后写入到一个文件,
然后我的软件用公钥解密这个文件, 然后使用这些数据, 如果数据错误, 那么软件执行出来的结果是错误的.
破解的即使绕过验证让软件运行, 也没法解密出我的这些数据.
雪    币: 59
活跃值: (2301)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NutCracker 2012-7-19 21:42
9
0
不如用openssl里面的RSA函数来得方便。
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pengmo 2012-7-23 08:59
10
0
openssl里面的RSA可以私钥加密公钥解密吗?
我命令行试验了一下, 没法做到啊???
雪    币: 626
活跃值: (668)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
MistHill 6 2012-8-7 09:20
11
0
你这个实际上就是RSA的签名与验证问题。其密钥用法刚好与RSA的加密(公钥加密,私钥解密)相反。
可参考“Restorator 2007注册的RSA算法分析及RCData中文处理补丁”里的相关部分。
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
天易love 18 2012-8-7 13:09
12
0
用私钥来加密不就是签名吗?用自己手上的公钥解密成功可以断定对方身份,前提是对方私钥没有泄露。加密和签名函数不会是同一个吧?如果是同一个,那密钥对里面含义要互换一下。
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
publickey 2012-8-8 15:27
13
0
从模幂的角度看待问题,不从加解密的角度看待问题,应该能实现你的需求。
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pengmo 2012-8-13 16:38
14
0
天易大神你好 签名验证成功是可以判断对方身份, 但是验证的代码也很容易被您找到吧, 你改一下不就破解了,  如果我用私钥加密了软件必须用到的数据, 那么即使您找到验证的代码也没用了吧? 只有用公钥解密出正确的数据, 软件才能正确执行. 这样破解软件就不容易了吧?
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhiz 2013-7-9 17:28
15
0
楼主既然只是要将核心数据加密后发放到用户解密,

那按照6楼jeffcjh的说法, 你自己手上捏着“公钥”不泄漏,然后把“私钥”发放给用户,这样不就解决了吗?

难道有规则限制说只能发放“公钥”隐藏“私钥”,不能反着来?
游客
登录 | 注册 方可回帖
返回