글 수 429
작업중인 코드이며 완벽하게 작동 되지 않는 코드입니다.
'정수값을 이진 문자열로 변환 Function DecToBin(byteDec As Double) Dim sBin As String '이진 문자열 Dim nTemp As Double '임시 값 저장소 '변수에 값 입력 nTemp = byteDec '2진 문자열 생성 Do While nTemp >= 1 '인수 분해 시작 sBin = CStr(nTemp Mod 2) & sBin nTemp = Int(nTemp / 2) Loop '리턴 값 출력 DecToBin = sBin End Function '이진 문자열을 정수값으로 변환 Function BinToDec(sDec As String) Dim nTemp As Double '임시 값 저장소 Dim nCount As Integer '카운터 '카운터 초기화 nCount = 0 '2진 문자열 생성 Do While nCount < Len(sDec) '정수값 산출 시작 nTemp = nTemp + (CDbl(Mid(sDec, Len(sDec) - nCount, 1)) * (2 ^ nCount)) '카운터 증가 nCount = nCount + 1 Loop '리턴 값 출력 BinToDec = nTemp End Function 'Or 연산 수행 Function calcOr(nInput1 As Double, nInput2 As Double) Dim sData1 As String '입력 데이터1 Dim sData2 As String '입력 데이터2 Dim nCount As Integer '카운터 Dim sTemp As String '임시 스티링 '2진 스트링으로 변환 sData1 = DecToBin(nInput1) sData2 = DecToBin(nInput2) '32비트로 변환 sData1 = String(32 - Len(sData1), "0") & sData1 sData2 = String(32 - Len(sData2), "0") & sData2 '32비트 Or 연산 수행(한자리씩 비교) For nCount = 1 To 32 If Mid(sData1, nCount, 1) = 1 Or Mid(sData2, nCount, 1) = 1 Then sTemp = sTemp + "1" Else sTemp = sTemp + "0" End If Next '리턴 값 출력 calcOr = BinToDec(sTemp) End Function '32비트 좌측 시프트 연산 수행 Function ShiftLeft(nInput As Double, nShift As Integer) Dim sData As String '작업용 데이터 Dim sValue As String '임시 출력 값 '이진 변환 sData = DecToBin(nInput) '32비트 변환 sData = String(32 - Len(sData), "0") & sData '시프트 연산 수행 sValue = Mid(sData, nShift + 1, Len(sData)) '32비트 변환 sValue = sValue & String(32 - Len(sValue), "0") '리턴 값 출력 ShiftLeft = BinToDec(sValue) End Function '32비트 우측 시프트 연산 수행 Function ShiftRight(nInput As Double, nShift As Integer) Dim sData As String '작업용 데이터 Dim sValue As String '임시 출력 값 '이진 변환 sData = DecToBin(nInput) '32비트 변환 sData = String(32 - Len(sData), "0") & sData '시프트 연산 수행 sValue = Mid(sData, 1, Len(sData) - nShift) '32비트 변환 sValue = String(32 - Len(sValue), "0") & sValue '리턴 값 출력 ShiftRight = BinToDec(sValue) End Function '해쉬 만들기 Function makeHash(arrInput() As Byte) Dim nCount As Integer '카운터 Dim nTemp As Double '임시 데이터 'arrInput 배열은 바이트 배열이며 하나의 배열안에 8비트의 데이터가 들어 있음 '변수 초기화 nCount = 0 nTemp = 0 '해쉬 만들기 Do While nCount <= UBound(arrInput) 'nTemp = calcOr(((nTemp * 128) Mod (2 ^ 32)), (nTemp / 128)) + arrInput(nCount) '작동 안됨(Mod (2 ^ 32) 연산 수행시 오류) '실제 해쉬 만들기 작업 nTemp = calcOr(ShiftLeft(nTemp, 7), ShiftRight(nTemp, 7)) + arrInput(nCount) '배열 카운터 증가 nCount = nCount + 1 Loop '리턴 값 출력 makeHash = nTemp End Function Sub testHash() Dim toolCharset As New ChilkatCharset2 '문자 인코딩 변환 툴 로드 Dim sTemp As String Dim arrByte() As Byte '테스트 문자 sString = "000" toolCharset.FromCharset = "unicode" '입력언어에서 toolCharset.ToCharset = "shift_jis" 'Shift-JIS 로 'Shift-JIS로 인코딩 변환 수행 sTemp = toolCharset.ConvertData(sString) '배열 초기화 ReDim arrByte(LenB(sTemp)) '8비트씩 배열에 할당 arrByte() = sTemp '해쉬 실행 testHash = CStr(makeHash(arrByte())) End Sub