2010-03-17 2 views
2

내 문제는 조금 털이, 나는 40 문자 SHA1 해시를 20 문자 SHA1 해시로 변환 할 수 있습니까?

나는 회원 시스템의 사용자 암호를 & 염을 저장하는 기존의 MySQL 데이터베이스를 가지고 ..., 그래서 나와 함께 곰하시기 바랍니다 잘못된 질문을 할 수있다. 이 값은 모두 루비 프레임 워크를 사용하여 해시 된 - 대략 다음과 같이 :

hashedsalt = 다이제스트 :: SHA1.hexdigest ("- # {Time.now.to_s} - # {로그인} - - ")

hashedpassword = 다이제스트 :: SHA1.hexdigest ("# {hashedsalt} # {암호} ")

그래서 두 값이 모두 40 문자열 (VARCHAR로 저장됩니다

(40)).

이제 모든 사용자를 SQL Server 데이터베이스를 사용하는 새 웹 사이트의 ASP.NET 멤버 자격 프레임 워크로 가져와야합니다. 그것은 내가 ASP.NET 멤버십을 구성한 방식으로, 사용자 비밀번호와 소금도 SHA1 해시로 멤버쉽 데이터베이스 (테이블 aspnet_Membership)에 저장된다는 것을 이해합니다.이 해시는 Base64로 인코딩되며 (자세한 내용은 here 참조) 저장되어 있습니다. nvarchar (128) 데이터로 저장합니다.

그러나 저장되는 Base64 인코딩 된 문자열의 길이 (28 자)에서 ASP.NET 멤버십이 생성하는 SHA1 해시는 40 자 수가 아니라 20 자입니다. 일부 다른 읽기에서부터 이 문자/문자 집합/인코딩 또는 뭔가 관련된 당 비트 수와 관련이 있다고 생각합니다.

40 문자 SHA1 해시를 20 문자 해시로 변환하여 새 ASP.NET 멤버십 데이터 테이블로 전송할 수있는 방법이 있습니까? 저는 ASP.NET 멤버쉽에 대해 이미 잘 알고 있습니다 만,이 기사를 놓치고있는 것 같습니다. 그러나 루비의 SHA1과. NET의 SHA1은 호환되지 않으므로 잃어버린 전투와 싸우고있는 것으로 알려져 있습니다 ...

미리 감사드립니다.

답변

2

Ruby 응용 프로그램의 varchar 표현은 'hex as string'인 것처럼 보입니다 : 01AB02EF...23EF. 즉, 각 바이트는 00에서 FF 사이의 바이트의 16 진수 값인 문자 쌍으로 표시됩니다. 따라서 SHA 해시 (20 바이트)는 40 자로 표시됩니다. 해시가 값 (0, 1, 2, ...) 인 경우 문자열은 000102가됩니다. ASP base64는 실제 바이트의 base64 인코딩입니다. 따라서 MySQL 문자를 가져 와서 해당 바이트를 얻은 다음 base64로 인코딩하면됩니다.

당신은 SQL 자체 변환을 실제로 할 수

declare @x varchar(40); 
set @x = '000102030405060708090A0B0C0D0E0F10111213'; 

declare @sql nvarchar(max); 
set @sql = N'set @out=0x' + @x; 

declare @out varbinary(20); 
exec sp_executesql @sql, N'@out varbinary(20) output', @out output; 
select @out for xml path(''); 

그러나 해시 다이제스트를 저장하는 데 사용되는 인코딩 관련없는 루비 코드가 생성 된 소금에 절인 해시를 사용하도록 ASP.Net 멤버 자격 공급자를 강요하는 , 그것은 완전히 다른 주제입니다. 고유 한 멤버 자격 공급자를 다시 작성해야 할 수도 있습니다. 저장소 인코딩은 관련성이 없어집니다. 원하는 시점에 저장할 수 있기 때문입니다.

+0

매우 흥미 롭습니다. 내일 이것을 시도 할 것입니다. 정말 고맙습니다. – ewitch

1

Ruby는 SHA2를 사용하고 ASP.NET은 SHA1을 사용하며 아니요, 해당 버전간에 '변환'할 수 없습니다. 이를 위해서는 일반 텍스트에서 해시를 다시 계산해야합니다.

편집 : SHA는 표준화되어 있으므로 인터넷에서 ASP.NET에서 사용할 SHA2 라이브러리를 검색 할 수 있습니다.

+0

.net에는 SHA1 클래스가 있습니다. http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx –

관련 문제