【】C++如何用16进制的公钥字符串进行RSA加密?

【高分求教】C++怎么用16进制的公钥字符串进行RSA加密???
本帖最后由 jkvast 于 2013-03-10 20:46:09 编辑
java加密方法如下:

String modeHex = "D548C6267CC503F1E926776A97F8644CAA67167E8FA5D74FD1F4E0BCB3608BD1583E41B102B5B4617E53B90A0C67EA652F8D96B40CFDDA6BC1501432ADCE15E4B5B916568893C94FF3CAC5ED5942FC604BAD1B12DF7683B25C6702BD8CF1BE2F5A4FFC97C82E42FD91E49A6EFF379F5F022F36E5395D64FC9430EEFCAC55F0A5";
String exponentHex = "10001";

KeyFactory factory = KeyFactory.getInstance("RSA");

BigInteger n = new BigInteger(modeHex, 16);
BigInteger e = new BigInteger(exponentHex, 16);
RSAPublicKeySpec spec = new RSAPublicKeySpec(n, e);

RSAPublicKey pub = (RSAPublicKey) factory.generatePublic(spec);
Cipher enc = Cipher.getInstance("RSA");
enc.init(Cipher.ENCRYPT_MODE, pub);

byte[] encryptedContentKey = enc.doFinal(messageg.getBytes("GB2312"));

String result = new String(Hex.encodeHex(encryptedContentKey));


我在网上找了很多大数实现的RSA,但是每次加密出来的结果都是一样的,但用java加密每次结果都不一样

在此请教各位高手,用c++怎么实现以上java代码一样的功能,最好不要用openssl、crypt++等加密库

问题解决马上结贴,谢谢
c++ 加密 RSA

------解决方案--------------------
为何不用Openssl,你把代码摘出来也可以。
------解决方案--------------------
如果用openssl, 这个代码完全就是改一下函数名, 及调用方式等. 
------解决方案--------------------
为什么不用现成的库?

------解决方案--------------------
怎么可能,相同的公钥,相同的信息,加密出来的结果肯定一样
------解决方案--------------------
Openssl现成的库。
------解决方案--------------------
String modeHex = "\uD548\uC626\u7CC5\u...\uF0A5";
String exponentHex = "\u0001\u0001";

试试看
------解决方案--------------------
引用:
怎么可能,相同的公钥,相同的信息,加密出来的结果肯定一样


6楼的说法很正确,每次加密结果不一样,RSA就蛋疼了,还商用和毛。

RSA的算法部分已经有现成的代码了。
而且加密解密流程很清楚。

楼主去看看加密解密的流程吧。语言不是问题。
理解公钥,私钥,和加解密过程是最重要的。至于实现,交给别人的库做去吧

------解决方案--------------------
引用:
引用:怎么可能,相同的公钥,相同的信息,加密出来的结果肯定一样

如果你有java 环境,运行下我贴出的代码,
每次打印的结果都不一样

这个是正常的,RSA的加密数据时候要做padding,padding的算法决定了結果是否相同
一般测试的时候会用一个固定的padding算法,正式用的时候会用随机的padding算法
解密的时候会自动把padding去掉的
你如果要测试,最好看看有没有提供不带padding的算法