나는 WPF PasswordBox
에서 수집 한 중요한 정보를 취할 필요가 있습니다. 사용자가이 데이터를 입력 한 후에는 System.Security.Cryptography.Rijendael
암호화 기 개체를 사용하여 암호화해야합니다.Rijndael 암호화기를 사용하여 SecureString의 내용을 암호화하는 가장 좋은 방법은 무엇입니까?
는 현재 수정되고,이 코드는 "평문"문자열을 사용하고 다음 코드를 사용하고 암호화 :
using (var rijAlg = Rijndael.Create())
{
var salt = ... //Generated Salt
rijAlg.KeySize = CryptographyHelper.ENCRYPTION_KEYSIZE;
rijAlg.Key = encryptionKey; //This is an encryption key safely derived elsewhere.
rijAlg.IV = salt;
var encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
using (var msEncrypt = new MemoryStream())
{
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText); //Plain Text value.
}
encrypted = msEncrypt.ToArray();
}
}
}
위에 값 plainText
가 실제로 암호화 방법으로 전달되는 값이다. 메서드가 끝나면 encrypted
값은 Convert.ToBase64String(...)
으로 전달되고 데이터는 Base64로 변환되어 암호화 메서드에서 반환됩니다.
내 질문에 위의 코드를 수정하여 암호화해야하는 값을 나타내는 SecureString
객체를 가져 와서 관련 값을 안전하게 암호화하고 관련 데이터를 정리하고 암호화 된 데이터를 문자열로 반환하면됩니다. 내가 plainText
값인 것처럼? 계속 메서드를 파생 시켜서 SecureString
개체를 반환 할 수 있으면 좋겠지 만, 그 문제는 다른 질문 일 수 있습니다.
Rijndael 또는 SymmetricAlgorithm에서 파생 될 수 있고 서명에 오버로드하여 문자열을 Create에 전달할 수 있습니까? https://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael(v=vs.110).aspx – Programmer
@Programmer 당신이 무엇을 의미하는지 잘 모르겠습니다. 특히 SecureString에서 오는 문자열 데이터를 전달하고 싶지 않습니다. SecureString 객체를 사용하는 목적의 일부는 .Net 문자열이 안전하지 않으므로 생성을 막는 것입니다. – RLH
SecureString에 대한 자세한 내용을 읽었으니 걱정을 많이합니다. 스택이 마음에 들지 않으며 한 번에 한 문자 씩 소스가 필요하지 않은 곳입니다. https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110) .aspx. 이 문제를 어떻게 해결했는지 궁금합니다! – Programmer