ASP의 MD5 및 SHA256 다중 암호화 기술은 문자열을 기반으로 암호화 유형을 얻습니다. 이는 혼합 암호화이므로 큰 이익을 얻을 수 없습니다! C#/C/C++, ASP.NET, VB.NET으로 이식 가능 또는 현재 사용 가능한 다른 유형의 언어: MD5 알고리즘, SHA256 알고리즘, MD5 먼저 SHA256, 먼저 SHA256 다음 MD5, 두 번 MD5, 두 번 SHA256, 처음 8비트 MD5 알고리즘, 그 다음 8비트 SHA256 알고리즘, 처음 8비트 SHA256 알고리즘의 마지막 8비트 MD5 알고리즘은 비밀번호의 마지막 문자의 AscW 값과 나머지 8을 암호화 체계 계수로 사용하는 16비트 MD5 암호화, 32비트 MD5 암호화, 8비트 SHA256 암호화, 16비트 SHA256 암호화, 24비트 SHA256 암호화, 32비트 SHA256 암호화, 40비트 SHA256 암호화, 48비트 SHA 256 암호화, 56비트 SHA256 암호화, 64비트 SHA256 암호화 및 기타 알고리즘. 소스 코드를 읽은 후 더 많은 암호화 조합 및 암호화 알고리즘을 사용자 정의할 수 있습니다. MD5 알고리즘의 무차별 대입 크래킹에 작별 인사를 하세요~~
cls_Encrypt.asp 소스 코드:
다음과 같이 코드 코드를 복사합니다.
<%
개인 상수 BITS_TO_A_BYTE = 8
개인 상수 BYTES_TO_A_WORD = 4
개인 상수 BITS_TO_A_WORD = 32
클래스 Cls_Encrypt
비공개 MD5_m_lOnBits(30)
개인 MD5_m_l2Power(30)
비공개 SHA256_m_lOnBits(30)
비공개 SHA256_m_l2Power(30)
비공개 SHA256_K(63)
비공개 하위 클래스_초기화
MD5_m_lOnBits(0) = CLng(1)
MD5_m_lOnBits(1) = CLng(3)
MD5_m_lOnBits(2) = CLng(7)
MD5_m_lOnBits(3) = CLng(15)
MD5_m_lOnBits(4) = CLng(31)
MD5_m_lOnBits(5) = CLng(63)
MD5_m_lOnBits(6) = CLng(127)
MD5_m_lOnBits(7) = CLng(255)
MD5_m_lOnBits(8) = CLng(511)
MD5_m_lOnBits(9) = CLng(1023)
MD5_m_lOnBits(10) = CLng(2047)
MD5_m_lOnBits(11) = CLng(4095)
MD5_m_lOnBits(12) = CLng(8191)
MD5_m_lOnBits(13) = CLng(16383)
MD5_m_lOnBits(14) = CLng(32767)
MD5_m_lOnBits(15) = CLng(65535)
MD5_m_lOnBits(16) = CLng(131071)
MD5_m_lOnBits(17) = CLng(262143)
MD5_m_lOnBits(18) = CLng(524287)
MD5_m_lOnBits(19) = CLng(1048575)
MD5_m_lOnBits(20) = CLng(2097151)
MD5_m_lOnBits(21) = CLng(4194303)
MD5_m_lOnBits(22) = CLng(8388607)
MD5_m_lOnBits(23) = CLng(16777215)
MD5_m_lOnBits(24) = CLng(33554431)
MD5_m_lOnBits(25) = CLng(67108863)
MD5_m_lOnBits(26) = CLng(134217727)
MD5_m_lOnBits(27) = CLng(268435455)
MD5_m_lOnBits(28) = CLng(536870911)
MD5_m_lOnBits(29) = CLng(1073741823)
MD5_m_lOnBits(30) = CLng(2147483647)
MD5_m_l2Power(0) = CLng(1)
MD5_m_l2Power(1) = CLng(2)
MD5_m_l2Power(2) = CLng(4)
MD5_m_l2Power(3) = CLng(8)
MD5_m_l2Power(4) = CLng(16)
MD5_m_l2Power(5) = CLng(32)
MD5_m_l2Power(6) = CLng(64)
MD5_m_l2Power(7) = CLng(128)
MD5_m_l2Power(8) = CLng(256)
MD5_m_l2Power(9) = CLng(512)
MD5_m_l2Power(10) = CLng(1024)
MD5_m_l2Power(11) = CLng(2048)
MD5_m_l2Power(12) = CLng(4096)
MD5_m_l2Power(13) = CLng(8192)
MD5_m_l2Power(14) = CLng(16384)
MD5_m_l2Power(15) = CLng(32768)
MD5_m_l2Power(16) = CLng(65536)
MD5_m_l2Power(17) = CLng(131072)
MD5_m_l2Power(18) = CLng(262144)
MD5_m_l2Power(19) = CLng(524288)
MD5_m_l2Power(20) = CLng(1048576)
MD5_m_l2Power(21) = CLng(2097152)
MD5_m_l2Power(22) = CLng(4194304)
MD5_m_l2Power(23) = CLng(8388608)
MD5_m_l2Power(24) = CLng(16777216)
MD5_m_l2Power(25) = CLng(33554432)
MD5_m_l2Power(26) = CLng(67108864)
MD5_m_l2Power(27) = CLng(134217728)
MD5_m_l2Power(28) = CLng(268435456)
MD5_m_l2Power(29) = CLng(536870912)
MD5_m_l2Power(30) = CLng(1073741824)
SHA256_m_lOnBits(0) = CLng(1)
SHA256_m_lOnBits(1) = CLng(3)
SHA256_m_lOnBits(2) = CLng(7)
SHA256_m_lOnBits(3) = CLng(15)
SHA256_m_lOnBits(4) = CLng(31)
SHA256_m_lOnBits(5) = CLng(63)
SHA256_m_lOnBits(6) = CLng(127)
SHA256_m_lOnBits(7) = CLng(255)
SHA256_m_lOnBits(8) = CLng(511)
SHA256_m_lOnBits(9) = CLng(1023)
SHA256_m_lOnBits(10) = CLng(2047)
SHA256_m_lOnBits(11) = CLng(4095)
SHA256_m_lOnBits(12) = CLng(8191)
SHA256_m_lOnBits(13) = CLng(16383)
SHA256_m_lOnBits(14) = CLng(32767)
SHA256_m_lOnBits(15) = CLng(65535)
SHA256_m_lOnBits(16) = CLng(131071)
SHA256_m_lOnBits(17) = CLng(262143)
SHA256_m_lOnBits(18) = CLng(524287)
SHA256_m_lOnBits(19) = CLng(1048575)
SHA256_m_lOnBits(20) = CLng(2097151)
SHA256_m_lOnBits(21) = CLng(4194303)
SHA256_m_lOnBits(22) = CLng(8388607)
SHA256_m_lOnBits(23) = CLng(16777215)
SHA256_m_lOnBits(24) = CLng(33554431)
SHA256_m_lOnBits(25) = CLng(67108863)
SHA256_m_lOnBits(26) = CLng(134217727)
SHA256_m_lOnBits(27) = CLng(268435455)
SHA256_m_lOnBits(28) = CLng(536870911)
SHA256_m_lOnBits(29) = CLng(1073741823)
SHA256_m_lOnBits(30) = CLng(2147483647)
SHA256_m_l2Power(0) = CLng(1)
SHA256_m_l2Power(1) = CLng(2)
SHA256_m_l2Power(2) = CLng(4)
SHA256_m_l2Power(3) = CLng(8)
SHA256_m_l2Power(4) = CLng(16)
SHA256_m_l2Power(5) = CLng(32)
SHA256_m_l2Power(6) = CLng(64)
SHA256_m_l2Power(7) = CLng(128)
SHA256_m_l2Power(8) = CLng(256)
SHA256_m_l2Power(9) = CLng(512)
SHA256_m_l2Power(10) = CLng(1024)
SHA256_m_l2Power(11) = CLng(2048)
SHA256_m_l2Power(12) = CLng(4096)
SHA256_m_l2Power(13) = CLng(8192)
SHA256_m_l2Power(14) = CLng(16384)
SHA256_m_l2Power(15) = CLng(32768)
SHA256_m_l2Power(16) = CLng(65536)
SHA256_m_l2Power(17) = CLng(131072)
SHA256_m_l2Power(18) = CLng(262144)
SHA256_m_l2Power(19) = CLng(524288)
SHA256_m_l2Power(20) = CLng(1048576)
SHA256_m_l2Power(21) = CLng(2097152)
SHA256_m_l2Power(22) = CLng(4194304)
SHA256_m_l2Power(23) = CLng(8388608)
SHA256_m_l2Power(24) = CLng(16777216)
SHA256_m_l2Power(25) = CLng(33554432)
SHA256_m_l2Power(26) = CLng(67108864)
SHA256_m_l2Power(27) = CLng(134217728)
SHA256_m_l2Power(28) = CLng(268435456)
SHA256_m_l2Power(29) = CLng(536870912)
SHA256_m_l2Power(30) = CLng(1073741824)
SHA256_K(0) = &H428A2F98
SHA256_K(1) = &H71374491
SHA256_K(2) = &HB5C0FBCF
SHA256_K(3) = &HE9B5DBA5
SHA256_K(4) = &H3956C25B
SHA256_K(5) = &H59F111F1
SHA256_K(6) = &H923F82A4
SHA256_K(7) = &HAB1C5ED5
SHA256_K(8) = &HD807AA98
SHA256_K(9) = &H12835B01
SHA256_K(10) = &H243185BE
SHA256_K(11) = &H550C7DC3
SHA256_K(12) = &H72BE5D74
SHA256_K(13) = &H80DEB1FE
SHA256_K(14) = &H9BDC06A7
SHA256_K(15) = &HC19BF174
SHA256_K(16) = &HE49B69C1
SHA256_K(17) = &HEFBE4786
SHA256_K(18) = &HFC19DC6
SHA256_K(19) = &H240CA1CC
SHA256_K(20) = &H2DE92C6F
SHA256_K(21) = &H4A7484AA
SHA256_K(22) = &H5CB0A9DC
SHA256_K(23) = &H76F988DA
SHA256_K(24) = &H983E5152
SHA256_K(25) = &HA831C66D
SHA256_K(26) = &HB00327C8
SHA256_K(27) = &HBF597FC7
SHA256_K(28) = &HC6E00BF3
SHA256_K(29) = &HD5A79147
SHA256_K(30) = &H6CA6351
SHA256_K(31) = &H14292967
SHA256_K(32) = &H27B70A85
SHA256_K(33) = &H2E1B2138
SHA256_K(34) = &H4D2C6DFC
SHA256_K(35) = &H53380D13
SHA256_K(36) = &H650A7354
SHA256_K(37) = &H766A0ABB
SHA256_K(38) = &H81C2C92E
SHA256_K(39) = &H92722C85
SHA256_K(40) = &HA2BFE8A1
SHA256_K(41) = &HA81A664B
SHA256_K(42) = &HC24B8B70
SHA256_K(43) = &HC76C51A3
SHA256_K(44) = &HD192E819
SHA256_K(45) = &HD6990624
SHA256_K(46) = &HF40E3585
SHA256_K(47) = &H106AA070
SHA256_K(48) = &H19A4C116
SHA256_K(49) = &H1E376C08
SHA256_K(50) = &H2748774C
SHA256_K(51) = &H34B0BCB5
SHA256_K(52) = &H391C0CB3
SHA256_K(53) = &H4ED8AA4A
SHA256_K(54) = &H5B9CCA4F
SHA256_K(55) = &H682E6FF3
SHA256_K(56) = &H748F82EE
SHA256_K(57) = &H78A5636F
SHA256_K(58) = &H84C87814
SHA256_K(59) = &H8CC70208
SHA256_K(60) = &H90BEFFFA
SHA256_K(61) = &HA4506CEB
SHA256_K(62) = &HBEF9A3F7
SHA256_K(63) = &HC67178F2
서브 끝
비공개 하위 클래스_종료
서브 끝
'문자 전송 변환 배열 기능
개인 함수 ConvertToWordArray(byVal sMessage)
메시지 길이가 희미함
희미한 lNumberOfWords
희미한 lWordArray()
희미한 lBytePosition
희미한 lByteCount
희미한 lWordCount
상수 MODULUS_BITS = 512
상수 CONGRUENT_BITS = 448
lMessageLength = 길이(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
l바이트카운트 = 0
lByteCount >= lMessageLength까지 수행
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) 또는 LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
고리
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) 또는 LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
ConvertToWordArray = lWordArray
기능 종료
'문자열 왼쪽 시프트 주 함수
개인 함수 LShift(byVal lValue, byVal iShiftBits)
iShiftBits = 0이면
LShift = l값
종료 기능
ElseIf iShiftBits = 31 그러면
lValue가 1이면
LShift = &H80000000
또 다른
L시프트 = 0
종료 조건
종료 기능
ElseIf iShiftBits < 0 또는 iShiftBits > 31 그러면
오류 발생 6
종료 조건
If (lValue And MD5_m_l2Power(31 - iShiftBits)) 그러면
LShift = ((lValue 및 MD5_m_lOnBits(31 - (iShiftBits + 1))) * MD5_m_l2Power(iShiftBits)) 또는 &H80000000
또 다른
LShift = ((lValue 및 MD5_m_lOnBits(31 - iShiftBits)) * MD5_m_l2Power(iShiftBits))
종료 조건
기능 종료
'문자열 오른쪽 시프트 주 함수
개인 함수 RShift(byVal lValue, byVal iShiftBits)
iShiftBits = 0이면
RShift = l값
종료 기능
ElseIf iShiftBits = 31 그러면
lValue 및 &H80000000인 경우
RShift = 1
또 다른
R시프트 = 0
종료 조건
종료 기능
ElseIf iShiftBits < 0 또는 iShiftBits > 31 그러면
오류 발생 6
종료 조건
RShift = (lValue 및 &H7FFFFFFE) / MD5_m_l2Power(iShiftBits)
If (lValue And &H80000000) 그러면
RShift = (RShift 또는 (&H40000000 / MD5_m_l2Power(iShiftBits - 1)))
종료 조건
기능 종료
'문자열 오프셋 변환, 왼쪽 및 오른쪽 시프트 함수를 통해 구현됨
개인 함수 RotateLeft(byVal lValue, byVal iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) 또는 RShift(lValue, (32 - iShiftBits))
기능 종료
'부호 없는 16진수 인코딩 추가
개인 함수 AddUnsigned(byVal lX, byVal lY)
x4
y4
x8
y8
희미한 결과
lX8 = lX 그리고 &H80000000
lY8 = lY 및 &H80000000
lX4 = lX 그리고 &H40000000
lY4 = lY 그리고 &H40000000
lResult = (lX 그리고 &H3FFFFFFFF) + (lY 그리고 &H3FFFFFFFF)
lX4 및 lY4이면
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 또는 lY4 그러면
lResult가 &H40000000인 경우
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
또 다른
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
종료 조건
또 다른
lResult = lResult Xor lX8 Xor lY8
종료 조건
AddUnsigned = lResult
기능 종료
'MD5_FF,MD5_GG,MD5_HH,MD5_II MD5 주요 인코딩 기능
개인 서브 MD5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_F(b, c, d), x), ac))
a = 왼쪽으로 회전(a, s)
a = AddUnsigned(a, b)
서브 끝
비공개 서브 MD5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_G(b, c, d), x), ac))
a = 왼쪽으로 회전(a, s)
a = AddUnsigned(a, b)
서브 끝
개인 서브 MD5_HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_H(b, c, d), x), ac))
a = 왼쪽으로 회전(a, s)
a = AddUnsigned(a, b)
서브 끝
개인 서브 MD5_II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_I(b, c, d), x), ac))
a = 왼쪽으로 회전(a, s)
a = AddUnsigned(a, b)
서브 끝
'MD5_F,MD5_G,MD5_H,MD5_I MD5 보조 인코딩 기능
전용 함수 MD5_F(x, y, z)
MD5_F = (x 및 y) 또는 ((x 아님) 및 z)
기능 종료
전용 함수 MD5_G(x, y, z)
MD5_G = (x 및 z) 또는 (y 및 (z 아님))
기능 종료
전용 함수 MD5_H(x, y, z)
MD5_H = (x Xor y Xor z)
기능 종료
전용 함수 MD5_I(x, y, z)
MD5_I = (y Xor (x 또는 (z 아님)))
기능 종료
'16 16진수 인코딩 변환
개인 함수 WordToHex(byVal lValue)
희미한 1바이트
희미한 lCount
lCount = 0 ~ 3의 경우
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) 및 MD5_m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right(0 & Hex(lByte), 2)
다음
기능 종료
'MD5 주요 기능 MD5(문자열, 인코딩 비트)
공용 함수 MD5(byVal sMessage, byVal sType)
희미한 x
희미한 k
희미한 AA
희미한 BB
희미한 CC
DimDD
어둡게
희미한 b
희미한 c
희미한 d
상수 S11 = 7
상수 S12 = 12
상수 S13 = 17
상수 S14 = 22
상수 S21 = 5
상수 S22 = 9
상수 S23 = 14
상수 S24 = 20
상수 S31 = 4
상수 S32 = 11
상수 S33 = 16
상수 S34 = 23
상수 S41 = 6
상수 S42 = 10
상수 S43 = 15
상수 S44 = 21
x = ConvertToWordArray(sMessage) '암호화 1단계: 배열 변환
a = &H67452301
b = &HEFCDAB89
c = &H98BADCFE
d = &H10325476
k = 0인 경우 UBound(x)로 16단계
AA = 에
BB = b
CC = c
DD = 디
'암호화 2단계: 인코딩 변환
MD5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
MD5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
MD5_FF c, d, a, b, x(k + 2), S13, &H242070DB
MD5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
MD5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
MD5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
MD5_FF c, d, a, b, x(k + 6), S13, &HA8304613
MD5_FF b, c, d, a, x(k + 7), S14, &HFD469501
MD5_FF a, b, c, d, x(k + 8), S11, &H698098D8
MD5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
MD5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
MD5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
MD5_FF a, b, c, d, x(k + 12), S11, &H6B901122
MD5_FF d, a, b, c, x(k + 13), S12, &HFD987193
MD5_FF c, d, a, b, x(k + 14), S13, &HA679438E
MD5_FF b, c, d, a, x(k + 15), S14, &H49B40821
MD5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
MD5_GG d, a, b, c, x(k + 6), S22, &HC040B340
MD5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
MD5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
MD5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
MD5_GG d, a, b, c, x(k + 10), S22, &H2441453
MD5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
MD5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
MD5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
MD5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
MD5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
MD5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
MD5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
MD5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
MD5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
MD5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
MD5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
MD5_HH d, a, b, c, x(k + 8), S32, &H8771F681
MD5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
MD5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
MD5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
MD5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
MD5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
MD5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
MD5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
MD5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
MD5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
MD5_HH b, c, d, a, x(k + 6), S34, &H4881D05
MD5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
MD5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
MD5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
MD5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665
MD5_II a, b, c, d, x(k + 0), S41, &HF4292244
MD5_II d, a, b, c, x(k + 7), S42, &H432AFF97
MD5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
MD5_II b, c, d, a, x(k + 5), S44, &HFC93A039
MD5_II a, b, c, d, x(k + 12), S41, &H655B59C3
MD5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
MD5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
MD5_II b, c, d, a, x(k + 1), S44, &H85845DD1
MD5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
MD5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
MD5_II c, d, a, b, x(k + 6), S43, &HA3014314
MD5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
MD5_II a, b, c, d, x(k + 4), S41, &HF7537E82
MD5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
MD5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
MD5_II b, c, d, a, x(k + 9), S44, &HEB86D391
'암호화 3단계: 서명되지 않은 변환 추가
a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = 서명되지 않은 추가(c, CC)
d = AddUnsigned(d, DD)
다음
sType = 32이면
'암호화 4단계: 각각의 8자리 16진수 변환을 분할하고 결합합니다.
MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
또 다른
MD5 = LCase(WordToHex(b) & WordToHex(c))
종료 조건
기능 종료
개인 함수 SHA256_LShift(byVal lValue, byVal iShiftBits)
iShiftBits = 0이면
SHA256_LShift = l값
종료 기능
ElseIf iShiftBits = 31 그러면
lValue가 1이면
SHA256_LShift = &H80000000
또 다른
SHA256_LShift = 0
종료 조건
종료 기능
ElseIf iShiftBits < 0 또는 iShiftBits > 31 그러면
오류 발생 6
종료 조건
If (lValue And SHA256_m_l2Power(31 - iShiftBits)) 그러면
SHA256_LShift = ((lValue 및 SHA256_m_lOnBits(31 - (iShiftBits + 1))) * SHA256_m_l2Power(iShiftBits)) 또는 &H80000000
또 다른
SHA256_LShift = ((lValue 및 SHA256_m_lOnBits(31 - iShiftBits)) * SHA256_m_l2Power(iShiftBits))
종료 조건
기능 종료
개인 함수 SHA256_RShift(byVal lValue, byVal iShiftBits)
iShiftBits = 0이면
SHA256_RShift = l값
종료 기능
ElseIf iShiftBits = 31 그러면
lValue 및 &H80000000인 경우
SHA256_Rshift = 1
또 다른
SHA256_Rshift = 0
종료 조건
종료 기능
ElseIf iShiftBits < 0 또는 iShiftBits > 31 그러면
오류 발생 6
종료 조건
SHA256_RShift = (lValue 및 &H7FFFFFFE) / SHA256_m_l2Power(iShiftBits)
If (lValue And &H80000000) 그러면
SHA256_RShift = (SHA256_RShift 또는 (&H40000000 / SHA256_m_l2Power(iShiftBits - 1)))
종료 조건
기능 종료
개인 함수 SHA256_AddUnsigned(byVal lX, byVal lY)
x4
y4
x8
y8
희미한 결과
lX8 = lX 그리고 &H80000000
lY8 = lY 그리고 &H80000000
lX4 = lX 그리고 &H40000000
lY4 = lY 그리고 &H40000000
lResult = (lX 그리고 &H3FFFFFFFF) + (lY 그리고 &H3FFFFFFFF)
lX4 및 lY4이면
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 또는 lY4 그러면
lResult가 &H40000000인 경우
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
또 다른
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
종료 조건
또 다른
lResult = lResult Xor lX8 Xor lY8
종료 조건
SHA256_AddUnsigned = lResult
기능 종료
개인 함수 SHA256_CH(x, y, z)
SHA256_Ch = ((x 및 y) Xor ((x 아님) 및 z))
기능 종료
개인 함수 SHA256_Maj(x, y, z)
SHA256_Maj = ((x 및 y) Xor (x 및 z) Xor (y 및 z))
기능 종료
개인 함수 SHA256_S(x, n)
SHA256_S = (SHA256_RShift(x, (n 및 SHA256_m_lOnBits(4))) 또는 SHA256_LShift(x, (32 - (n 및 SHA256_m_lOnBits(4)))))
기능 종료
개인 함수 SHA256_R(x, n)
SHA256_R = SHA256_RShift(x, cLng(n 및 SHA256_m_lOnBits(4)))
기능 종료
개인 함수 SHA256_Sigma0(x)
SHA256_Sigma0 = (SHA256_S(x, 2) X또는 SHA256_S(x, 13) X또는 SHA256_S(x, 22))
기능 종료
개인 함수 SHA256_Sigma1(x)
SHA256_Sigma1 = (SHA256_S(x, 6) X또는 SHA256_S(x, 11) X또는 SHA256_S(x, 25))
기능 종료
비공개 함수 SHA256_Gamma0(x)
SHA256_Gamma0 = (SHA256_S(x, 7) X또는 SHA256_S(x, 18) X또는 SHA256_R(x, 3))
기능 종료
비공개 함수 SHA256_Gamma1(x)
SHA256_Gamma1 = (SHA256_S(x, 17) X또는 SHA256_S(x, 19) X또는 SHA256_R(x, 10))
기능 종료
개인 함수 SHA256_ConvertToWordArray(byVal sMessage)
메시지 길이가 희미함
희미한 lNumberOfWords
희미한 lWordArray()
희미한 lBytePosition
희미한 lByteCount
희미한 lWordCount
희미한 1바이트
상수 MODULUS_BITS = 512
상수 CONGRUENT_BITS = 448
lMessageLength = 길이(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
l바이트카운트 = 0
lByteCount >= lMessageLength까지 수행
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE
lByte = AscB(Mid(sMessage, lByteCount + 1, 1))
lWordArray(lWordCount) = lWordArray(lWordCount) 또는 SHA256_LShift(lByte, lBytePosition)
lByteCount = lByteCount + 1
고리
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) 또는 SHA256_LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 1) = SHA256_LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 2) = SHA256_RShift(lMessageLength, 29)
SHA256_ConvertToWordArray = lWordArray
기능 종료
' ================================================ ==========================================
' SHA256 암호화 알고리즘
' ================================================ ========================================
'호출 방법:
' SHA256(sMessage, p_Len)
' p_Len은 생성된 문자열의 길이를 제어하며, 1은 8비트, 2는 16비트, 최대값은 8, 즉 암호화 후 길이는 64비트입니다.
'8비트/16비트/24비트/32비트/40비트/48비트/56비트/64비트 암호화 제어
공용 함수 SHA256(byVal sMessage, byVal p_Len)
희미한 해시(7)
어둑한
딤 W(63)
어둡게
희미한 b
희미한 c
희미한 d
희미한 전자
에프
DiMg
시간
나는 어둡다
j
희미한 T1
희미한 T2
해시(0) = &H6A09E667
해시(1) = &HBB67AE85
해시(2) = &H3C6EF372
해시(3) = &HA54FF53A
해시(4) = &H510E527F
해시(5) = &H9B05688C
해시(6) = &H1F83D9AB
해시(7) = &H5BE0CD19
M = SHA256_ConvertToWordArray(sMessage)
i = 0인 경우 UBound(M)으로 16단계
a = 해시(0)
b = 해시(1)
c = 해시(2)
d = 해시(3)
e = 해시(4)
f = 해시(5)
g = 해시(6)
h = 해시(7)
j = 0 ~ 63의 경우
j < 16이면
W(j) = M(j + i)
또 다른
W(j) = SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_Gamma1(W(j - 2)), W(j - 7)), SHA256_Gamma0(W(j - 15))), W(j - 16))
종료 조건
T1 = SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(h, SHA256_Sigma1(e)), SHA256_CH(e, f, g)), SHA256_K(j)), W(j))
T2 = SHA256_AddUnsigned(SHA256_Sigma0(a), SHA256_Maj(a, b, c))
h = g
지 = 에프
f = 전자
e = SHA256_AddUnsigned(d, T1)
d = c
c = b
비 = 에이
a = SHA256_AddUnsigned(T1, T2)
다음
HASH(0) = SHA256_AddUnsigned(a, HASH(0))
HASH(1) = SHA256_AddUnsigned(b, HASH(1))
HASH(2) = SHA256_AddUnsigned(c, HASH(2))
HASH(3) = SHA256_AddUnsigned(d, HASH(3))
HASH(4) = SHA256_AddUnsigned(e, HASH(4))
HASH(5) = SHA256_AddUnsigned(f, HASH(5))
HASH(6) = SHA256_AddUnsigned(g, HASH(6))
HASH(7) = SHA256_AddUnsigned(h, HASH(7))
다음
SHA256 =
p_Len >= 8이면 p_Len = 8
p_Len <= 0이면 p_Len = 2
i = 0에서 p_Len - 1로
SHA256 = SHA256 & Right(00000000 & Hex(HASH(i)), 8)
다음
SHA256 = L케이스(SHA256)
기능 종료
공용 함수 EncryptMode(ByVal p_String, ByVal p_Type)
희미한 E1, E2
E1s = 16 '첫번째 MD5 알고리즘 암호화 길이 16비트 MD5 암호화 길이
E2s = 2 ' 두 번째 또는 SHA256 알고리즘 암호화의 길이는 2*8=16비트 SHA256 암호화 길이, 최대 암호화 길이는 8*8=64비트
IsNumeric(p_Type)이 아닌 경우
p_유형 = 1
ElseIf p_Type > 7 or p_Type < 0 Then 'p_Type의 최대값을 기준으로 계획 수를 판단합니다.
p_유형 = 1
종료 조건
IsNumeric(E1s)이 아닌 경우
E1 = 16
ElseIf E1s <> 16 And E1s <> 32 그러면
E1 = 16
종료 조건
IsNumeric(E2s)이 아닌 경우
E2 = 2
ElseIf E2s > 8 또는 E2s < 0 그러면
E2 = 2
종료 조건
' ==========================================
'처음 배포할 때 암호화 체계를 조정하는 것이 가장 좋습니다. 현재 최대 8개의 체계가 있습니다.
'암호화된 문자열의 길이는 16비트로 사용 중에 조정될 수 있습니다.
' ==========================================
케이스 p_Type 선택
사례 0 ' MD5 알고리즘
EncryptMode = MD5(p_String, E1s)
사례 1 ' SHA256 알고리즘
EncryptMode = SHA256(p_String, E2s)
사례 2 ' 먼저 MD5, 그 다음 SHA256
EncryptMode = SHA256(MD5(p_String, E1s), E2s)
사례 3 'SHA256이 먼저, 그다음 MD5
EncryptMode = MD5(SHA256(p_String, E2s), E1s)
사례 4' MD5 2번
EncryptMode = MD5(MD5(p_String, E1s), E2s)
사례 5' SHA256 2번
EncryptMode = SHA256(SHA256(p_String, E1s), E2s)
Case 6 'MD5 알고리즘의 처음 8비트와 SHA256 알고리즘의 마지막 8비트
EncryptMode = 왼쪽(MD5(p_String, E1s), 8) 및 오른쪽(SHA256(p_String, E2s), 8)
Case 7 ' SHA256 알고리즘의 처음 8비트와 MD5 알고리즘의 마지막 8비트
EncryptMode = 왼쪽(SHA256(p_String, E2s), 8) 및 오른쪽(MD5(p_String, E1s), 8)
선택 종료
기능 종료
' ============================================
'모든 사이트 비밀번호에 대한 범용 암호화 기능
' ============================================
공용 함수 PassWordEnt(ByVal p_String)
p_String = 또는 IsNull(p_String)이면 p_String = 1
' 비밀번호 마지막 문자의 AscW 값과 8의 나머지를 암호화 방식 계수로 사용합니다.
PassWordEnt = EncryptMode(p_String, AscW(LCase(Right(p_String, 1))) Mod 8)
기능 종료
수업 종료
%>
데모:
다음과 같이 코드 코드를 복사합니다.
<!--#include 파일=cls_Encrypt.asp-->
<%
희미한 오
o 설정 = 새 Cls_Encrypt
Response.write MD5 알고리즘: & o.EncryptMode(admin,0) & <br />
Response.write SHA256 알고리즘: & o.EncryptMode(admin,1) & <br />
Response.write 첫 번째 MD5 다음 SHA256: & o.EncryptMode(admin,2) & <br />
Response.write 먼저 SHA256 다음 MD5: & o.EncryptMode(admin,3) & <br />
Response.write MD5 두 번: & o.EncryptMode(admin,4) & <br />
Response.write SHA256 두 번: & o.EncryptMode(admin,5) & <br />
Response.write MD5 알고리즘의 처음 8자리 및 SHA256 알고리즘의 마지막 8자리: & o.EncryptMode(admin,6) & <br />
Response.write SHA256 알고리즘의 처음 8비트 및 MD5 알고리즘의 마지막 8비트: & o.EncryptMode(admin,7) & <br /><hr />
Response.write는 비밀번호 마지막 문자의 AscW 값과 나머지 8을 암호화 체계 계수로 사용합니다. & o.PassWordEnt(admin) & <br /><hr />
Response.write 16비트 MD5 암호화: & o.md5(admin,16) & <br />
Response.write 32비트 MD5 암호화: & o.md5(admin,32) & <br /><hr />
Response.write 8비트 SHA256 암호화: & o.sha256(admin,1) & <br />
Response.write 16비트 SHA256 암호화: & o.sha256(admin,2) & <br />
Response.write 24비트 SHA256 암호화: & o.sha256(admin,3) & <br />
Response.write 32비트 SHA256 암호화: & o.sha256(admin,4) & <br />
Response.write 40비트 SHA256 암호화: & o.sha256(admin,5) & <br />
Response.write 48비트 SHA256 암호화: & o.sha256(admin,6) & <br />
Response.write 56비트 SHA256 암호화: & o.sha256(admin,7) & <br />
Response.write 64비트 SHA256 암호화: & o.sha256(admin,8) & <br />
o = 없음으로 설정
%>