2010-02-24 4 views
3

해시 된 비밀번호를 만드는 방법이 있습니다. 그러나 salt에서 충돌합니다 .CopyTo (pwd, 0); 대상 바이트 []가 너무 작음을 나타냅니다. 어떻게 문제를 해결할 수 있습니까?바이트를 다른 바이트 []로 복사 할 때의 문제점

byte[] result = new byte[salt.Length + password.Length]; 
    salt.CopyTo(result, 0); 
    password.CopyTo(result, salt.Length); 
+3

당신은 정말 소금으로 암호의 SHA에서 생성 된 바이트의 일부를 덮어하고자 했는가, 또는 당신은 그 바이트 전에 소금을 삽입하려고 했습니까? –

+0

내 의도는 암호 해시를하기 전에 암호 시작 부분에 소금을 추가하는 것입니다. – Jova

답변

9

당신은 소금과 암호를 모두 포함하는 이상 바이트 배열을 만들 필요가? 당신은 을 암호에 추가 할 작정입니까? 여기

암호의 시작에 추가하는 방법 :이 같은

byte[] pwdAndSalt = new byte[pwd.Length + salt.Length]; 
for (int i = 0; i < pwdAndSalt.Length; i++) 
{ 
    if (i < salt.Length) 
    { 
     pwdAndSalt[i] = salt[i]; 
    } 
    else 
    { 
     pwdAndSalt[i] = pwd[i - salt.Length]; 
    } 
} 
+0

무작위가 아니어야합니다. 해쉬 된 암호와 해시 된 암호에 대해 암호를 테스트하는 것이 무엇인지 알아야합니다. –

+1

Zach : 무작위로 작성해야하지만 복사본을 보관해야합니다. 그러나 나는 어쨌든 그가 시도한 것을 깨닫고 배열의 시작 부분에 바이트를 삽입함으로써 내 대답을 바 꾸었습니다. –

+0

소금의 목적이 레인보우 테이블 공격을이기는 것이므로 무작위로 생각할 필요는 없습니다. 악의적 인 사람들이 소금이 무엇인지 알더라도 암호의 해시를 수동으로 계산해야합니다. –

0

소금이 얼마나 큰 :

public static byte[] CreateHashedPassword(string password, byte[] salt) 
     { 
      SHA1 sha1 = SHA1.Create(); 
      byte[] pwd = CustomHelpers.StringToByteArray(password); 
      salt.CopyTo(pwd, 0); 
      sha1.ComputeHash(pwd); 

      return pwd;    
     } 
1

어쩌면 뭔가?

public static byte[] CreateHashedPassword(string password, byte[] salt) 
{ 
    SHA1 sha1 = SHA1.Create(); 
    byte[] pwd = CustomHelpers.StringToByteArray(password); 
    byte[] pwdPlusSalt = new byte[salt.Length + pwd.Length]; 
    salt.CopyTo(pwdPlusSalt, 0); 
    pwd.CopyTo(pwdPlusSalt, salt.Length); 

    return sha1.ComputeHash(pwdPlusSalt); 
} 
+0

Jeffrey, Mark가 제안한 바를 추가 한 후 내 코드가 어떻게 생겼는지 알려 줘서 고맙습니다. – Jova

관련 문제