我使用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());
加密和解密操作在同一方面做得很好,但在另一方面的解密操作中提到了问题。
答案 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)
)
);