오늘 웹 응용 프로그램을 .net 4.0으로 옮겼으며 Forms Auth가 작동을 멈췄습니다. 내 SqlMembershipProvider (내장 된 SqlMembershipProvider의 단순화 된 버전)를 몇 시간 파고 들자 마자 HMACSHA256 해시가 일관성이 없다는 것을 알았습니다. 다음은 암호화 방법입니다..NET 4.0에서 잘못된 암호 오류가 발생했습니다.
internal string EncodePassword(string pass, int passwordFormat, string salt)
{
if (passwordFormat == 0) // MembershipPasswordFormat.Clear
return pass;
byte[] bIn = Encoding.Unicode.GetBytes(pass);
byte[] bSalt = Convert.FromBase64String(salt);
byte[] bAll = new byte[bSalt.Length + bIn.Length];
byte[] bRet = null;
Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
if (passwordFormat == 1)
{ // MembershipPasswordFormat.Hashed
HashAlgorithm s = HashAlgorithm.Create(Membership.HashAlgorithmType);
bRet = s.ComputeHash(bAll);
} else
{
bRet = EncryptPassword(bAll);
}
return Convert.ToBase64String(bRet);
}
동일한 암호와 소금을 두 번 입력하면 결과가 달라집니다 !!! .NET 3.5에서 완벽하게 작동했습니다.
심각한 변경 사항을 알고 있거나 알려진 버그입니까?
업데이트 : 해시 알고리즘으로 SHA512를 지정하면, 모든 것이 잘 작동, 그래서 감사
.NET 4.0은 HMACSHA256 해시 알고리즘의 구현에 버그 믿는다! 안드레이
나는 이것 좀 봐 .NET 4.0의 몇 가지 보안 관련 변경 사항이 있었다 생각