任何人都可以澄清与Rsa相关的事情的“整个”故事。(我想,那是因为填充或其他原因)。
好的。我的总体目标是加密密码(仅一种方式)以散列状态存储在数据库中。
我的做法是:
我使用如何通过 RSA (通用)方法生成唯一公钥和私钥来创建私钥/公钥。
const int PROVIDER_RSA_FULL = 1;
const string CONTAINER_NAME = "KeyContainer";
CspParameters cspParams;
cspParams = new CspParameters(PROVIDER_RSA_FULL);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
rsa = new RSACryptoServiceProvider(cspParams);
string publicPrivateKeyXML = rsa.ToXmlString(true);
string publicOnlyKeyXML = rsa.ToXmlString(false);
// do stuff with keys...
并在需要时执行以下操作:
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicOnlyKeyXML);
var valueToEncode = Console.ReadLine();
Console.WriteLine(Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(valueToEncode), false)));
// initially that's rsa.Encrypt(...
并且每次我进行相同的值加密时,我都会收到不同的值,这不适合以这种方式存储密码(因为我不解密它以进行用户身份验证,而只是比较散列值)。
任何人都可以澄清编码的情况吗?
此外,如今将密码编码为哈希的常见做法是什么(.NET/C#)。
谢谢!