2012-08-02 98 views
1

我一直試圖在C++中獲得相當於C++的代碼數天,現在還沒解決。在C#中相當於RSA C++#

這裏是我的C#代碼:

RSAParameters rsaParams = new RSAParameters(); 
rsaParams.Modulus = someByteArray; 
rsaParams.Exponent = someByteArray1; 
rsaParams.D = someByteArray2; 
rsaParams.DP = someByteArray3; 
rsaParams.DQ = someByteArray4; 
rsaParams.P = someByteArray5; 
rsaParams.Q = someByteArray6; 
rsaParams.InverseQ = someByteArray7; 

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) 
{ 
    rsa.ImportParameters(rsaParams); 
    byte[] encryptedData = rsa.Encrypt(toEncrypt, false); 
} 

我只想有完全相同的結果,但在C++(跨平臺)。我看了很多圖書館/課程,但看起來不太合理。首先,Crypto ++是偉大的,但所有我想要的是RSA,所以當我看着它時,所有的散列/加密/其他算法都是浪費。我發現this類,我認爲這很好,因爲它只有RSA,而且很小。問題是,這些參數是不是與C#命名相同,或者它不支持。我覺得我不應該知道每個參數在RSA中意味着什麼才能實現它,因爲我只想在這裏完成一個簡單的任務。謝謝。

+0

是因爲你在C#前端和C++後端,你需要相同的參數的原因是什麼? – 2012-08-02 23:06:22

+0

不,這是因爲我只是用C#測試一些東西,而我的應用程序將使用C++,所以我只需要將它轉移。 – hetelek 2012-08-02 23:07:26

+1

由於您使用的RSA加密包含隨機填充,即使成功實現了正確的兼容C++版本,也不會得到完全相同的結果。此外,只有前兩個字段(模數和指數)需要或用於RSA *加密*。 – 2012-08-03 22:39:05

回答

2

RSAParameters結構的屬性基於Chinese Remainder Algorithm。 你看過OpenSSL加密庫嗎?

RSA結構由多個BIGNUM組件組成。它可以 包含公共和私人的RSA密鑰:

struct 
    { 
    BIGNUM *n;    // public modulus 
    BIGNUM *e;    // public exponent 
    BIGNUM *d;    // private exponent 
    BIGNUM *p;    // secret prime factor 
    BIGNUM *q;    // secret prime factor 
    BIGNUM *dmp1;   // d mod (p-1) 
    BIGNUM *dmq1;   // d mod (q-1) 
    BIGNUM *iqmp;   // q^-1 mod p 
    // ... 
    }; 
RSA 
+0

爲什麼我覺得設置很困難?我從http://www.openssl.org/source/下載了最新版本,並且嘗試在includes文件夾中包含導致錯誤的'rsa.h'...我必須在這裏丟失一大部分內容。 – hetelek 2012-08-03 02:10:22

+0

如果您有OpenSSL問題,請嘗試在此處或[OpenSSL支持,郵件列表](http://www.openssl.org/support/community.html) – 2012-08-03 04:05:02

+1

@hetelek:查看「apps/rsa.c」源代碼舉一個例子。你想要的功能是'RSA_public_encrypt()',填充應該是RSA_PKCS1_PADDING,它被定義爲1。 – 2012-08-03 22:37:22