암호를 해독하고 web.config 파일을 변경하는 방법을 이미 알고있는 것으로 보이지만 나머지 프로세스를 구현하는 방법에 익숙해졌습니다. ILSpy을 사용
, 여기에 각 사용자의 소금을 생성하는 방법은 다음과 같습니다
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] array = Convert.FromBase64String(salt);
byte[] array2 = new byte[array.Length + bytes.Length];
Buffer.BlockCopy(array, 0, array2, 0, array.Length);
Buffer.BlockCopy(bytes, 0, array2, array.Length, bytes.Length);
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) {
return Convert.ToBase64String(sha1.ComputeHash(array2));
}
pass
가 plain-입니다 : 당신이 소금을 일단
byte[] array = new byte[16];
new RNGCryptoServiceProvider().GetBytes(array);
return Convert.ToBase64String(array);
, 여기에 비밀번호를 생성하는 방법 텍스트 비밀번호 이 계산되고 salt
은 위의 첫 번째 코드 스 니펫에서 계산 된 문자열입니다. default algorithm is SHA1, 왜 이것이 사용되고 있는지 궁금하다면.
이것은 일회성 프로세스이므로 짧은 예약 유지 관리 기간 동안 수동으로 데이터베이스를 업데이트하는 HTTP 처리기를 작성합니다. (백업 및 테스트를 먼저 수행하십시오).당신이 aspnet_Membership
테이블의 다음 필드 업데이트해야합니다 :
Password
을 - 1
PasswordSalt
- -
PasswordFormat
위의 계산
위의 계산 결코 이런 일을해야했다, 그러나 잘하면 그게 당신을 시작할 것입니다 :)
그렉에 대한 최종 의견을 보았습니까? 나는 기본적으로 그의 제안을 밟았지만, 결국 분명히 뭔가를 놓쳤다. 불행히도, 그는 그 의견에 응답하지 않았고 거기에서 끝났습니다. ASP.NET 멤버쉽에 대해 알지 못해도 충분하지 않을 것으로 생각됩니다. –
"저장"이라고하면 그게 무슨 뜻입니까? 회원 공급자를 통해 또는 직접? 기존 데이터를 잃지 않고이를 수행하는 방법이 명확하지 않습니다. 어떻게 여러 공급자를 선택하고 무엇을하는지를 지정합니까? –
아이디어는 * 기존 데이터 (암호화 된 암호)를 잃어 버리고 싶다는 것입니다. 이전 게시물의 주석에 따라 MembershipUser.GetPassword()를 사용하여 암호화 된 공급자의 현재 암호를 가져 오려고 할 수 있습니다. 이것은 해독 가능한 암호화를 사용하고 있기 때문에 가능합니다.이 메서드는 해시 된 공급자에서 작동하지 않습니다. 해독 된 암호가 있으면 해시 (소금으로)하고 싶습니다. 이는 일방 통행 프로세스입니다. 그런 다음 해쉬 된 멤버 자격 공급자를 사용하여 해시로 암호화 된 암호를 효과적으로 덮어 쓰게하여 암호의 결과 해시를 저장합니다. (계속) –