决心(寻找我的答案)。我需要在C++中用RSA加密密码。我正在为Blackberry10在C++工作,我一直在寻找一个RSA教程,或者是一些东西,可以帮助我完成加密过程,但遗憾的是,我没有发现任何一致的东西。
有人告诉我,这个过程包括三个步骤:
1)用该模型和指数生成RSA公钥。2)使用公钥对文本进行加密。3)在base640中对文本进行再次加密。
如果你想知道为什么我需要遵循这三个步骤是因为我在一个银行应用程序工作,这是他们的要求。
我一直在搜索,甚至没有找到如何进行第一步,生成带有模块和指数的公钥(我已经两者都有了)。
任何帮助都将不胜感激。
谢谢。
不是说我要自己构建整个应用程序。我们是一个团队,我只需要用RSA加密客户端密码,并将其发送到进程的下一步。我确实有使用黑莓和RSA的经验,但是在Java中,这个过程稍微容易一些,例如:在java中,一旦获得模块和公共指数,第一步就是通过一个非常简单的组合创建RSA公钥对象: RSAPublicKey publicKey =新RSAPublicKey(新RSACryptoSystem(2048年),e字节,mbytes);在这部分中,我有点迷失了,因为我还没有找到合适的BB10文档。我很抱歉,如果我创造了一个错觉,我正在创建一个完整的加密API。BB10有一个基于hursa.h (raw.html)的安全API,我正在尝试实现它,但我没有成功。@owlstead @bta
发布于 2012-10-17 18:53:47
解决了。在对BB10编码和RSA进行了深入的研究和了解之后,提出了在C/C++中成功地为BB10或其他平台加密纯文本的解决方案。请考虑一下,我从我正在工作的服务中得到了rsa对象的模数和公共指数。
守则:
QByteArray answer;
RSA* rsa = RSA_new();
BIGNUM *modulus = BN_new();
BIGNUM *exponent = BN_new();
const char *modulusString = rsaObj->getM(); //My Modulus
const char *exponentString = rsaObj->getE(); //My exponent
BN_hex2bn(&modulus, modulusString);
BN_hex2bn(&exponent, exponentString);
rsa->n = BN_new();
BN_copy(rsa->n, modulus);
rsa->e = BN_new();
BN_copy(rsa->e, exponent);
int maxSize = RSA_size(rsa);
qDebug() << "maxSize:" << maxSize;
const char *inn = "1234";
unsigned char *encrypted = (unsigned char*) malloc(maxSize);
int bufferSize = RSA_public_encrypt(strlen(inn), (unsigned char *) inn,
encrypted, rsa, RSA_PKCS1_PADDING);
if (bufferSize == -1) {
RSA_free(rsa);
qDebug() << "Error";
}
QByteArray enc = QByteArray::fromRawData((const char*) encrypted, 256);
answer = enc.toBase64();
return answer;谢谢,我希望这对新的BB10开发人员有帮助
发布于 2012-10-09 20:52:52
我强烈建议您利用现有的加密库来处理所有这些问题。OpenSSL被广泛使用,LibTom库也包括一个加密库。从零开始实现加密不是一件容易的事情,您将通过使用现有的实现节省大量的时间和挫折。特别是OpenSSL是一个很好的选择,因为它已经通过了多次FIPS认证测试。由于您正在开发银行应用程序,您(以及您的客户)很可能希望使用经过认证的实现。
即使您坚持从头开始实现您自己的加密库,我也鼓励您查看上述库作为示例。
发布于 2012-10-09 21:39:33
在我看来,你所知道的比你想象的更少,你对这个密码学的工作原理了解得更少。
通常不使用RSA加密来加密数据。它可以做一些短的事情,如PIN或密码,但通常要做的是生成一个对称密钥和加密数据使用对称密钥,然后使用RSA加密对称密钥。
如果您正在向银行发送密码,那么您可能要做的是使用银行在自己的密钥证书中提供的RSA密钥。只有银行有私钥,所以只有银行才能解密密码。如果这是正确的,那么您不需要生成RSA密钥,但是您确实需要验证证书是可信的。
我不编写黑莓程序,所以我不知道他们支持什么加密API,但是我希望你需要内置的所有东西。这都是很普通的东西。
我建议您在开始设计解决方案之前先阅读公钥密码学(例如维基百科、这里和这里)。
https://stackoverflow.com/questions/12808069
复制相似问题