如何将 Crypto++ RSA 与 C# RSA 加密服务提供商同步?
How to sync Crypto++ RSA with C# RSA crypto service provider?
我使用 Crypto++ 对字符串文本进行加密,但是当我想通过 C# RSA 加密服务提供商对其进行解密时出现异常。
当使用 Crypto++ 使用常量 public 密钥加密同一个字符串时,我的代码多次生成相同的密码字符串,而使用 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());
同侧加解密操作都很好,但另一侧解密操作出现问题
加密使用此代码:
RSAES_OAEP_SHA_Encryptor e(publicKey);
string cipher;
StringSource stringSource(message, true,
new PK_EncryptorFilter(rng, e,
new StringSink(cipher)
)
);
与解密:
RSAES_OAEP_SHA_Decryptor d(privateKey);
StringSource stringSource(cipher, true,
new PK_DecryptorFilter(rng, d,
new StringSink(recovered)
)
);
我使用 Crypto++ 对字符串文本进行加密,但是当我想通过 C# RSA 加密服务提供商对其进行解密时出现异常。
当使用 Crypto++ 使用常量 public 密钥加密同一个字符串时,我的代码多次生成相同的密码字符串,而使用 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());
同侧加解密操作都很好,但另一侧解密操作出现问题
加密使用此代码:
RSAES_OAEP_SHA_Encryptor e(publicKey);
string cipher;
StringSource stringSource(message, true,
new PK_EncryptorFilter(rng, e,
new StringSink(cipher)
)
);
与解密:
RSAES_OAEP_SHA_Decryptor d(privateKey);
StringSource stringSource(cipher, true,
new PK_DecryptorFilter(rng, d,
new StringSink(recovered)
)
);