2012-11-09 4 views
3

SHA-1/{SSHA}에 LDAP 암호가 저장되어 있으면 erlang에서 어떻게 유효성을 검사합니까? 예를 들어erlang SSHA ldap

- 다음 {SSHA}을 제공 : (얼랑에서) 내가 그 일반 텍스트 '{SSHA} GEH5kMEQZHYHS95dgr6KmFdg0a4BicBP'의 해시 값 'myPassword'일치를 검증 할 방법

% slappasswd -s myPassword 
{SSHA}GEH5kMEQZHYHS95dgr6KmFdg0a4BicBP 
% 

.

답변

1

다른 사람들의 도움을 받아 얼랭에서 이것을 수행하는 루틴을 찾았습니다. 다른 사람들과 공유하려면 여기를 클릭하십시오.

이 트릭은 'LDAP {SSHA}이'인코딩이라고했다 : -

먼저이 링크 (다른 포스트에서 발견는) 다른 언어 기능을 내가 원하는 일을 제공합니다 base64로 인코딩 된 salt-SHA1 해시입니다. 따라서 이것을 해독하고 소금을 추출한 다음 비교를 위해 '암호 지우기'를 다시 인코딩 할 때 사용해야합니다. 여기에 출력의 -

validatessha(ClearPassword, SshaHash) -> 
    D64 = base64:decode(lists:nthtail(6, SshaHash)), 
    {HashedData, Salt} = lists:split(20, binary_to_list(D64)), 
    NewHash = crypto:sha(list_to_binary(ClearPassword ++ Salt)), 
    string:equal(binary_to_list(NewHash), HashedData). 

내 원래의 게시물의 데이터를 감안할 때 :

67> run:validatessha("myPassword", "{SSHA}GEH5kMEQZHYHS95dgr6KmFdg0a4BicBP"). 
true 
68> 

고맙습니다 모두 여기에

이 작업을 수행 짧은 얼랑 루틴입니다.

마이크

0

내 erlang은 매우 녹슬 었으므로별로 좋지는 않지만 어쨌든 내 생각은 마찬가지입니다.

run() -> 
    Password = "myPassword", 
    HashRaw = os:cmd("slappasswd -s " ++ Password), 
    Hash1 = lists:nthtail(6, HashRaw), 
    Hash2 = lists:concat ([integer_to_list(X, 16) || X <- binary_to_list(crypto:sha(Password))]), 
    string:equal(string:to_lower(Hash1), 
       string:to_lower(Hash2)). 

내 생각은 당신 :

  • 실행 출력이 당신이 (slappasswd를) 확인에 관심이 명령 출력을 저장하고 해시 앞에 여분의 장식을 멀리 트림.
  • erlang 라이브러리의 crypto:sha()을 실행하십시오. 이진 출력을 가져 와서 정수 목록으로 변환 한 다음 각각을 16 진수 문자열로 변환 한 다음 연결하여 Hash2를 만듭니다. 난 당신이 사용하고이 명령을하지 않아도, 그래서 정말 철저하게 이것을 시도 할 수 없습니다 .. 그러나 그것은 작동 :
  • crypto:sha()

편집의 출력에 명령의 출력을 비교 sha1sum. 나는 그들이 같은 희망!

1

디렉터리 서버에 저장된 암호는 BIND 작업을 사용하여 유효성을 검사합니다. 제대로 구성되고 보안 된 디렉토리 서버는 암호 데이터에 대한 액세스를 허용하지 않습니다. 따라서 LDAP 클라이언트는 암호 화되었거나 해시되어 있는지 여부에 상관없이 암호 데이터를 사용할 수 있다고 예상해서는 안됩니다. LDAP 클라이언트는 BIND 조작을 사용하여 암호의 유효성을 검증해야합니다.

+0

으로 이해 - 따라서 내 질문에 - 우리가 LDAP의 외부 이러한 SSHA 암호화 된 암호를 검증하기 위해 찾고 있습니다. – mwalker