2012-02-12 3 views
5

로그온/로그 오프 기능으로 웹 사이트를 만들려고하고 있으며 암호를 올바르게 해싱하고 소금으로 처리 할 계획입니다. 그러나 내가 직면 한 문제는 데이터베이스에 암호를 저장하는 방법입니다. 데이터베이스 (해시 텍스트 또는 일반 암호화되지 않음)에 해쉬 된 + 암호가 설정된 암호를 저장해야한다는 것을 알고 있지만 기술적으로 이진 데이터를 데이터베이스에 삽입하는 방법을 알지 못합니다.C#을 사용하여 SQL Server 데이터베이스에 해시를 저장하려면 어떻게해야합니까?

초기 시도에서 데이터베이스에있는 데이터를 가져올 수있는 유일한 방법은 이진 데이터를 base64 문자열로 변환하고 varchar 암호 필드에 삽입하는 것이 었습니다. 그러나 그게 올바른 방법이 아니라는 것을 알려주고 있습니다. 그것을하기 위해.

데이터베이스의 암호 필드는 현재 varchar이지만 이해하면 해시 된 암호는 바이너리입니다. 그래서 암호 필드를 바이너리 개체로 변경해도, 나는 아직 모른다. 실제로 그것을 삽입하는 방법!

이해가 안되면 설명을 요청하면 다시 연락 드리겠습니다.

+1

해시는 varchar 일 수 있습니다 ... 바이너리가 아니어도 호기심에서 벗어났습니다. 사용중인 기능은 무엇입니까? – hackartist

+1

왜 base64를 사용하지 않으시겠습니까? 간단하고 데이터가 크기에 대해 걱정할 정도로 작습니다. –

+0

Base64는 사람이 읽을 수있는 형식으로 해시를 유지하는 가장 안전한 방법입니다. 소금에 절인 해시를 일반 텍스트로 저장하는 데는 아무런 문제가 없습니다. 그것이 암호가 아니라 해시를 저장하는 전체 목적입니다. – Douglas

답변

3

아니요, 해시 된 암호를 varbinary 필드에 저장하지 않아도되며이를 인코딩하여 varchar 필드에 저장할 수 있습니다. Base64는 모든 종류의 문자를 인코딩하는 좋은 대안입니다.

+2

문자열을 생성하고 물기 순서를 생성하지 않는 해시는 어떤 종류입니까? 내가 알고있는 모든 암호화 기능은 128, 160, 256 또는 512 비트와 같이 설정된 수의 비트를 생성하며 이는 문자열이 아닙니다 (문자열은 인코딩을 사용하여 저장됩니다). –

+0

@MartinLiversage MD5 해시를 사용하여 varchar 필드에 암호를 저장하는 데 문제가 없습니다. Linux는 looooong 시간 동안/etc/password에 MD5 해시를 사용했습니다. 요점은 당신이 varbinary 필드에 저장하지 않아도된다는 것입니다. – Icarus

+1

물론'varchar' 열에 해시를 저장할 수 있지만 base64 인코딩과 같은 것을 사용하여 해시를 인코딩해야합니다. 답은 해시를 문자열에 의미가없는 임의의 바이너리 시퀀스를 고려하지 않고 직접 저장할 수 있음을 나타냅니다. –

6

Microsoft SQL Server에서 binary 데이터 형식 (가변 길이 데이터가 필요한 경우 varbinary)의 열에 이진 데이터를 저장할 수 있습니다. 해시 및 소금에 절인 암호를 사용할 수 있습니다. 512 비트 해시 함수를 사용하고 512 비트 염을 사용하려면 2 * 512/8 = 128 바이트가 필요합니다 (예 : 소금과 해시를 저장하려면 binary(128)).

일반적으로 읽기 및 쓰기에 사용하는 API는 무엇이든간에 데이터베이스는 읽기와 이진 데이터를 작성하는 데 도움이해야하지만, 아마도 당신이 직접 테이블에 이진 값을 삽입 할 몇 가지 SQL을 사용하려면 당신은 다음과 같은 구문을 사용할 수 있습니다.. 정말

insert into MyTable values (0x123456789ABCDEF) 

되지 않음 대답에 질문을 던지십시오. 그러나 암호 기능을 구현하는 데 어려움이 있다면 미래에 난처한 오류를 피하기 위해 미리 만들어진 산업 강도 구성 요소를 사용하는 것이 좋습니다.

관련 문제