2012-10-09 152 views
0

已解決(查找我的答案)。我需要幫助用C++中的RSA加密密碼。我在C++中爲Blackberry10工作,我一直在尋找一個RSA教程或者是讓我通過加密過程的東西,但是遺憾的是我沒有找到任何一致的東西。RSA加密C++(BB10)

我已經被告知,該過程分三步basicaly包括:

1)生成與模塊和指數RSA公鑰。 2)用公鑰加密文本。 3)在base640中再次加密文本。

如果您想知道爲什麼我需要遵循這三個步驟是因爲我在銀行應用程序中工作,而這些都是他們的要求。

我一直在尋找所有,我甚至還沒有找到如何做第一步,與模塊和指數(我已經有兩個)生成公鑰。

任何幫助將不勝感激。

謝謝。


是不是我自己構建了整個應用程序。我們是一個團隊,我需要使用RSA加密客戶端密碼並將其發送到流程的下一個步驟。我有經驗與Blackberry和RSA一起工作,但在Java中,這個過程更容易一些,例如:在java中,獲得模塊和公開指數後的第一步是通過一個非常簡單的語法創建RSA公鑰對象: RSAPublicKey publicKey = new RSAPublicKey(新的RSACryptoSystem(2048),ebytes,mbytes);.在這部分是我有點失落,因爲我沒有找到適當的BB10文檔。我很抱歉,如果我創建了我自己創建一個完整的加密API的錯覺。 BB10的這個安全API基於hursa.h(https://developer.blackberry.com/native/beta/reference/com.qnx.doc.crypto/topic/about_rsa_raw.html)我試圖實現它,但我沒有成功。 @owlstead @dajames @bta

+0

你不知道密碼什麼,你正在創建一個*銀行應用程序*? –

+0

嘿@owlstead,我編輯我的問題,請檢查它。 – mariomunera

+0

那麼您是從模數和公開指數創建RSA公鑰?這與生成密鑰對完全不同。你能否更新這個問題以確保我們理解? –

回答

0

已解決。通過BB10編碼和RSA進行了一些研究並更好地瞭解之後,我最終提出瞭解決方案,以成功地在C/C++中爲BB10或任何其他平臺使用RSA和Base64加密純文本。請考慮我從我正在使用的服務中獲取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開發

3

我強烈建議您利用現有的加密庫來爲您處理所有這些問題。 OpenSSL被廣泛使用,並且LibTom庫也包括一個加密庫。加密並不是一件容易的事情,你可以通過使用現有的實現來節省大量時間和挫敗感。特別是OpenSSL是一個不錯的選擇,因爲它已多次通過FIPS認證測試。由於您正在開發銀行應用程序,因此您(和您的客戶)很可能會使用已通過認證的實施。

即使您堅持從頭開始實施您自己的加密庫,我鼓勵您查看上述庫作爲示例。

1

在我看來,你知道甚至比你想象的還要少這個密碼學的工作。

通常不使用RSA加密來加密數據。它可以像PIN或密碼那樣簡短,但通常做的是生成對稱密鑰並使用對稱密鑰加密數據,然後使用RSA加密對稱密鑰。

如果您要向銀行發送密碼,那麼您可能應該做的就是使用銀行提供的RSA密鑰作爲自己的密鑰證書。只有銀行有私鑰,所以只有他們可以解密密碼。如果這是正確的,那麼你不需要生成RSA密鑰,但是你確實需要驗證證書是否可信。

我不編程黑莓,所以我不知道他們支持哪些加密API,但我期望你需要內置的一切。這都是非常標準的東西。

我建議您在開始設計解決方案前,公鑰密碼(例如維基百科herehere)讀了開始。

+0

嗨@dajames感謝您的回答。我編輯了我的問題,更好地解釋我的情況。 – mariomunera