비밀번호 암호화에 rijndaelmanaged algoritham을 사용하고 있습니다.rijndaelmanaged 알고리즘 키 크기 제한?
암호화 된 텍스트 키의 크기를 제한하는 방법이 있습니까?
예 1, ABC - 암호화 된 키 크기 10
2, ABCDHGF - Encrypted key size 10
수단 고정 크기!
비밀번호 암호화에 rijndaelmanaged algoritham을 사용하고 있습니다.rijndaelmanaged 알고리즘 키 크기 제한?
암호화 된 텍스트 키의 크기를 제한하는 방법이 있습니까?
예 1, ABC - 암호화 된 키 크기 10
2, ABCDHGF - Encrypted key size 10
수단 고정 크기!
암호화 된 데이터에서 암호를 다시 가져올 필요가없는 경우 해시 알고리즘을 사용할 수 있습니다. 먼저 암호의 해시 값을 계산 한 다음이 해시 값을 암호화하십시오. 해시 값은 고정 길이이므로 암호화 된 데이터의 길이는 고정됩니다. 암호를 확인해야 할 때 암호화 된 값을 해독하고 입력 된 암호에서 해시 값을 다시 계산 한 다음 일치하는지 확인하십시오. 사인까지
var encryptedPwd = Encrypt(ComputeHash(txtPassword.Text));
Save(txtUsername.Text, encryptedPwd);
그리고 로그인 페이지
var encryptedPwd = SelectPwd(txtUsername.Text);
var pwdHash1 = Decrypt(encryptedPwd);
var pwdHash2 = ComputeHash(txtPassword.Text);
if (AreEqual(pwdHash1, pwdHash2))
// Login OK!
else
// Login fail
또 다른 옵션은 사용자 정의 패딩을 할 수있는 페이지
에 예를 들어. 암호의 최대 길이는 16 자입니다. 그런 다음 모든 비밀번호를 고정 char로 16 자까지 채울 수 있습니다. 그런 다음이 패딩 된 암호를 암호화하십시오. 유효성 검사는 더 쉬울 것이지만 해시 사용은 좀 더 안전합니다.
로그인
var encryptedPwd = SelectPwd(txtUsername.Text);
var pwd1 = Decrypt(encryptedPwd);
var pwd2 = txtPassword.Text.PadRight(16, 'X');
if (AreEqual(pwd1, pwd2))
// Login OK!
else
// Login fail
대신 간단한 해시를 사용하여 로그인
var encryptedPwd = Encrypt(txtPassword.Text.PadRight(16, 'X'));
Save(txtUsername.Text, encryptedPwd);
까지,
string password = "[email protected]$$w0rd";
byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }; // this is fixed... It would be better you used something different for each user
// You can raise 1000 to greater numbers... more cycles = more security. Try
// balancing speed with security.
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes(password, salt, 1000);
// generate key and iv
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(16);
byte[] encrypted;
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Key = key;
rijndaelCipher.IV = iv;
// Or your data
byte[] data = System.Text.Encoding.UTF8.GetBytes("hello world");
var encryptor = rijndaelCipher.CreateEncryptor();
encrypted = encryptor.TransformFinalBlock(data, 0, data.Length);
}
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Key = key;
rijndaelCipher.IV = iv;
var decryptor = rijndaelCipher.CreateDecryptor();
byte[] decrypted = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
// this if you are encrypting text, otherwise decrypted is already your data
string text = System.Text.Encoding.UTF8.GetString(decrypted);
}
Rfc2898에 지정된처럼 암호 강화 알고리즘을 사용하도록 제안 것 Rijndael algoritham에서 불가능하다는 뜻입니까? – Haris
예. 일반 데이터 크기가 변경되면 암호화 된 데이터 크기도 변경됩니다. –
당신의 도움에 감사드립니다,하지만 난 이미 Rijndael algoritham을 사용하고 이미 내 Db에 많은 암호화 된 암호가 있습니다. 그래서 다른 알고리즘으로 바꾸는 것은 불가능합니다. – Haris