RSA加密C ++(BB10)

时间:2012-10-09 20:40:42

标签: c++ encryption rsa blackberry-10

已解决(寻找我的答案)。我需要帮助用C ++中的RSA加密密码。我正在使用C ++中的Blackberry10工作,我一直在寻找一个RSA教程或一些能够引导我完成加密过程的东西,但遗憾的是我找不到任何一致的东西。

我被告知这个过程基本上分为三个步骤:

1)使用模块和指数生成RSA公钥。 2)使用公钥加密文本。 3)在base640中再次加密文本。

如果您想知道为什么我需要遵循这三个步骤是因为我在银行应用程序中工作,这些都是他们的要求。

我一直在搜索,我甚至没有找到如何进行第一步,使用模块和指数生成公钥(我已经有了)。

任何帮助将不胜感激。

感谢。


不是我自己构建整个应用程序。我们是一个团队,我需要使用RSA加密客户端密码,并将其发送到流程的下一步。我确实有使用Blackberry和RSA的经验,但在Java中,这个过程稍微容易一点,例如:在java中,一旦获得模块和公共指数,第一步就是通过一个非常简单的语法创建RSA公钥对象: RSAPublicKey publicKey = new RSAPublicKey(new RSACryptoSystem(2048),ebytes,mbytes);.在这部分是我有点迷失的地方因为我没有找到合适的BB10文档。如果我创造了一种我自己创建整个加密API的错觉,我很抱歉。 BB10有这个基于hursa.h的安全API(https://developer.blackberry.com/native/beta/reference/com.qnx.doc.crypto/topic/about_rsa_raw.html)我正在尝试实现它,但是我没有成功。 @owlstead @dajames @bta

3 个答案:

答案 0 :(得分:3)

我强烈建议您利用现有的加密库来为您处理所有这些问题。 OpenSSL被广泛使用,LibTom库也包含加密库。加密从头开始并不是一件容易的事情,通过使用现有的实现,您将节省大量的时间和挫败感。特别是OpenSSL是一个不错的选择,因为它已多次通过FIPS认证测试。由于您正在开发银行应用程序,因此您(以及您的客户)很可能希望使用已经过认证的实施。

即使您坚持从头开始实施自己的加密库,我建议您查看上述库作为示例。

答案 1 :(得分:1)

在我看来,你知道甚至比你认为这个密码学的工作方式还要少。

通常不使用RSA加密来加密数据。它可以用于像PIN或密码这样的短路,但通常做的是生成对称密钥并使用对称密钥加密数据,然后使用RSA加密对称密钥。

如果您要向银行发送密码,那么您可能应该做的就是使用银行提供的RSA密钥在他们自己的密钥证书中。只有银行拥有私钥,所以只有他们才能解密密码。如果这是正确的,那么您不需要生成RSA密钥,但您需要验证证书是否可信。

我不编程黑莓,所以我不知道他们支持哪些加密API,但我希望你需要内置所有内容。这都是非常标准的东西。

我建议您在开始设计解决方案之前先阅读公钥加密(例如。维基百科herehere)。

答案 2 :(得分:0)

解决。在做了一些研究并通过BB10编码和RSA更好地了解之后,我终于找到了成功使用RSA和Base64在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开发者有帮助