왜 그렇게 많은 해시 및 암호화 된 문자열이 등호로 끝나는가?


64

나는 C # 및 MSSQL에서 일하고 있으며 소금에 절인 해시 된 암호를 저장할 것으로 예상합니다.

nvarchar 열에 저장된 해시를 볼 때 (예 : outp 상자 aspnet 멤버 자격 공급자). 생성 된 Salt 및 Hash 값이 항상 하나 또는 두 개의 등호로 끝나는 이유가 항상 궁금합니다.

암호화 알고리즘을 사용하는 동안 비슷한 것을 보았습니다.이 우연의 일치입니까, 아니면 그 이유가 있습니까?


19
또한 Base64로 인코딩 된 이진 데이터를 NVARCHAR 필드에 저장하는 경우 6 배의 스토리지 낭비가 발생합니다. 하나의 경우 Base64는 ASCII의 하위 절반에 64 자만 포함 할 수 있으므로 절반을 저장하려면 VARCHAR 만 필요합니다. 2의 경우 Base64는 각 데이터 바이트를 1-4 자로 분해합니다. SQL Server는 이미 인코딩의 부풀림없이 해시를 저장할 수있는 VARBINARY 유형을 가지고 있으며 비교에서 데이터 정렬을 신경 쓰지 않습니다 ... :-)
jimbobmcgee

3
@WillieWheeler, 해시는 어떻게 든 저장해야합니다. Base64는 완벽한 저장 매체는 아니지만 본질적으로 아무런 문제가 없습니다. 경우 hash("my password")배열을 생산 [1,2,3,4,5]하고 나는 데이터베이스에 그 값을 저장해야하는 문자열을 저장하는 것보다 더 나쁜 선택이 거기에 AQIDBAU=사용되는 해시 함수 인 경우 (물론, 이미 문자열을 생산하고, 그 다음 Base64로 그것을 인코딩에 조금 바보 같다. )
Brian S

2
@WillieWheeler 당신이 요점을 놓치고 있다고 생각합니다. Brian S가 쓴 것을 다시 읽으십시오-그는 해싱을위한 base64의 속성에 대해 이야기하지 않았습니다. 그는 base64 형식으로 해시 (해시 함수 / 알고리즘으로 생성)를 저장하는 데 아무런 문제가 없다고 말합니다.
Andrew Savinykh 2018 년

3
OP는 해시를 저장하고 등호로 끝납니다. 이것은 그가 해시를 Base64 인코딩과 혼동하고 있음을 시사합니다. 요점은 해시를 base64로 인코딩하는 것이 좋다는 것입니다. 물론 그것은 무엇과 관련이 있습니까?
Willie Wheeler

2
네, 마침내 무슨 일이 일어나고 있는지 깨달았습니다. SSH 공개 및 개인 키 파일을 살펴본 결과 = / == 엔딩이 있음을 알았습니다. 이것은 BrianS 및 zespri describe와 같은 바이트 배열의 base64 인코딩입니다. 고마워
Willie Wheeler

답변:



36

Base 64 인코딩 패딩 일 수 있습니까?

'=='시퀀스는 마지막 그룹에 1 바이트 만 포함되었음을 나타내고 '='는 2 바이트를 포함했음을 나타냅니다. 아래 예제는 위 인용문 전체의 입력을 잘라내어 출력 패딩을 변경하는 방법을 보여줍니다.

http://en.wikipedia.org/wiki/Base64#Output_padding

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.