2012-11-29 2 views
1

현재 CakePhp 앱을 ASP.NET으로 마이그레이션 중입니다. 이 시점에서 나를 차단하고있는 한 가지는 사용자가 ASP.NET 응용 프로그램에서 로그인 할 수 있도록 적절한 암호를 입력하기 위해 올바른 해싱 방법을 얻을 수 없다는 것입니다.C#에서 MySQL CakePhp 사용자 인증

config/core.php 파일에 설정된 소금 값이 있습니다.

나는 해시 알고리즘이 사용 된 위치를 결정하려고 시도하고 올바른 쿼리 또는 결과를 찾을 수 없었습니다.

여기까지는 암호를 해시하는 C# 방식입니다. 내가 전이나 암호 후 소금을 넣어 시도했습니다

public static string ToHash(this string password, string salt) 
{ 
    if (string.IsNullOrEmpty(password)) 
    return ""; 

    var provider = new SHA1CryptoServiceProvider(); 
    var encoding = new UnicodeEncoding(); 
    var bytes = provider.ComputeHash(encoding.GetBytes(salt + password)); 
    return Encoding.UTF8.GetString(bytes); 
} 

, 그것은 여기에서 모든 현재 일치 없습니다 CakePHP의 MySQL 데이터베이스에서 해시 암호입니다 : 여기

을 c7fb60ef77dbe3d1681a68e6741ee3a23cc1f41d입니다

무엇

3의 V "1 나는 내 방식에서있다 : 여기서/방법을 해결하기 위해 정말

확실하지

ѐ 이 문제. 어떤 도움이나 힌트를 주시면 감사하겠습니다.

감사

답변

1

지금 나와 함께 케이크 소스를 가지고 있지 않습니다,하지만 당신은 쉽게 소스에 케이크의 해싱 및 염장 방법을 찾아 볼 수 있어야합니다.

위의 데이터 차이점은 Cake가 해시 바이트를 16 진수의 해시 바이트가있는 문자열로 변환하는 것처럼 보입니다. 해시 방법의 차이점이 무엇이든 관계없이 C# 해시의 결과를 비교하기 전에 (또는 다른 방식으로 이동하여 Cake의 16 진수 문자열을 파싱하고 바이트 배열을 만들어내는) 같은 문자열로 변환해야합니다.

3

나는 가지고있다!

는 적어도 내 구성을 위해 작동합니다

Core.php (파일의 Security.salt 검색)에서 소금을 찾습니다. BIN2HEX에 대한

string input = textBox1.Text; 
input = "your salt should be here" + input; 
var provider = new SHA1CryptoServiceProvider(); 
var encoding = new UTF8Encoding(); 
var bytes = provider.ComputeHash(encoding.GetBytes(input)); 
sha1result.Text = Bin2Hex(bytes); 

도우미가 여기에 있습니다 : : 그런 다음, (질문과 매우 유사)이 코드를 사용

public static string Bin2Hex(byte[] ba) 
{ 
    string hex = BitConverter.ToString(ba); 
    return hex.Replace("-", ""); 
} 

그것은 그것을 찾는 쉽지 않았다, 나는 아니오 (인터넷의 일부를 통해 검색 결과!) 결국 소스 파기에 의지했습니다.

+0

이 성공 후 우리는 케이크의 인증 된 사용자가 자동으로 인식되어 다른 side-asp.net에 로그인 할 수있게되었습니다. 나는 누군가가 친절하게 질문 할 것이면 이것을 나눌 것입니다 :) –