如何将Crypto ++ RSA与C#RSA加密服务提供商同步?

时间:2017-01-25 10:08:21

标签: c# c++ encryption cryptography crypto++

我使用Crypto ++加密字符串文本,但是当想要通过C#RSA加密服务提供程序解密时,我有一个例外。

我的代码在多次使用Crypto ++加密具有常量公钥的相同字符串时生成相同的密码字符串,而使用C#RSA加密服务提供程序的结果不同(密码字符串)。

这个问题的主要原因(运行时错误)与不同类型的RSA有关吗?

我使用Crypto ++的加密代码如下:

string message((char*)"hi", 2);
Integer messageInteger((const byte *)message.data(), message.size());
Integer cipherMessage = hostPublicKey.ApplyFunction(messageInteger);
size_t len = cipherMessage.MinEncodedSize();
string str;
str.resize(len);
cipherMessage.Encode((byte *)str.data(), str.size(), Integer::UNSIGNED);

Crypto ++解密代码是:

Integer cipherMessage1((byte *)str.data(), str.size());
int size1 = cipherMessage1.ByteCount();
Integer plainInteger = privateKey.CalculateInverse(prng, cipherMessage1);
string recovered;
size_t req = plainInteger.MinEncodedSize();
recovered.resize(req);
plainInteger.Encode((byte *)recovered.data(), recovered.size());

加密和解密操作在同一方面做得很好,但在另一方面的解密操作中提到了问题。

1 个答案:

答案 0 :(得分:1)

加密使用此代码:

]         # the ']' character, there is nothing special about it
\s        # match a whitespace character (i.e. space, tab, enter)
*         # the previous sub-expression (\s) repeated zero or more times
\[        # match the '[' character; it is a special character in regexps
          # and needs to be escaped here to make it "unspecial".

和解密:

    RSAES_OAEP_SHA_Encryptor e(publicKey);
    string cipher;
    StringSource stringSource(message, true,
        new PK_EncryptorFilter(rng, e,
            new StringSink(cipher)
        )
    );