เทคโนโลยีการเข้ารหัสหลายตัว MD5 และ SHA256 ของ ASP ได้รับประเภทการเข้ารหัสตามสตริง เป็นการเข้ารหัสแบบผสมและไม่มีความหวังที่จะทำกำไรมหาศาล! พกพาไปยัง C#/C/C++, ASP.NET, VB.NET หรือภาษาประเภทอื่น ๆ ที่มีอยู่ในปัจจุบัน: อัลกอริทึม MD5, อัลกอริทึม SHA256, MD5 ก่อนแล้ว SHA256, SHA256 แรกแล้ว MD5, สองครั้ง MD5, สองครั้ง SHA256, 8 บิตแรกของอัลกอริทึม MD5 และ 8 บิตของอัลกอริทึม SHA256, 8 บิตแรก ของอัลกอริทึม SHA256 อัลกอริธึม MD5 8 บิตสุดท้าย รับค่า AscW ของอักขระตัวสุดท้ายของรหัสผ่านและส่วนที่เหลือของ 8 เป็นค่าสัมประสิทธิ์รูปแบบการเข้ารหัส การเข้ารหัส MD5 16 บิต การเข้ารหัส MD5 32 บิต, การเข้ารหัส SHA256 8 บิต, การเข้ารหัส SHA256 16 บิต, การเข้ารหัส SHA256 24 บิต, การเข้ารหัส SHA256 32 บิต, การเข้ารหัส SHA256 40 บิต, SHA 48 บิต 256, การเข้ารหัส SHA256 56 บิต, การเข้ารหัส SHA256 64 บิต และอัลกอริธึมอื่น ๆ หลังจากอ่านซอร์สโค้ดแล้ว คุณสามารถปรับแต่งชุดการเข้ารหัสและอัลกอริธึมการเข้ารหัสเพิ่มเติมได้ บอกลาการถอดรหัสแบบ brute-force ของอัลกอริธึม MD5 ~~
ซอร์สโค้ด cls_Encrypt.asp:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
ค่าคอนต์ส่วนตัว BITS_TO_A_BYTE = 8
ค่าคงที่ส่วนตัว BYTES_TO_A_WORD = 4
ส่วนตัว Const BITS_TO_A_WORD = 32
คลาส Cls_Encrypt
MD5_m_lOnBits ส่วนตัว (30)
MD5_m_l2Power ส่วนตัว (30)
SHA256_m_lOnBits ส่วนตัว (30)
ส่วนตัว SHA256_m_l2กำลัง (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_l2กำลัง(0) = CLng(1)
MD5_m_l2กำลัง(1) = CLng(2)
MD5_m_l2กำลัง(2) = CLng(4)
MD5_m_l2กำลัง(3) = CLng(8)
MD5_m_l2กำลัง(4) = CLng(16)
MD5_m_l2กำลัง(5) = CLng(32)
MD5_m_l2กำลัง(6) = CLng(64)
MD5_m_l2กำลัง(7) = CLng(128)
MD5_m_l2กำลัง(8) = CLng(256)
MD5_m_l2กำลัง(9) = CLng(512)
MD5_m_l2กำลัง(10) = CLng(1024)
MD5_m_l2กำลัง(11) = CLng(2048)
MD5_m_l2กำลัง(12) = CLng(4096)
MD5_m_l2กำลัง(13) = CLng(8192)
MD5_m_l2กำลัง(14) = CLng(16384)
MD5_m_l2กำลัง(15) = CLng(32768)
MD5_m_l2กำลัง(16) = CLng(65536)
MD5_m_l2กำลัง(17) = CLng(131072)
MD5_m_l2กำลัง(18) = CLng(262144)
MD5_m_l2กำลัง(19) = CLng(524288)
MD5_m_l2กำลัง(20) = CLng(1048576)
MD5_m_l2กำลัง(21) = CLng(2097152)
MD5_m_l2กำลัง(22) = CLng(4194304)
MD5_m_l2กำลัง(23) = CLng(8388608)
MD5_m_l2กำลัง(24) = CLng(16777216)
MD5_m_l2กำลัง(25) = CLng(33554432)
MD5_m_l2กำลัง(26) = CLng(67108864)
MD5_m_l2กำลัง(27) = CLng(134217728)
MD5_m_l2กำลัง(28) = CLng(268435456)
MD5_m_l2กำลัง(29) = CLng(536870912)
MD5_m_l2กำลัง(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_l2กำลัง(0) = CLng(1)
SHA256_m_l2กำลัง(1) = CLng(2)
SHA256_m_l2กำลัง(2) = CLng(4)
SHA256_m_l2กำลัง(3) = CLng(8)
SHA256_m_l2กำลัง(4) = CLng(16)
SHA256_m_l2กำลัง(5) = CLng(32)
SHA256_m_l2กำลัง(6) = CLng(64)
SHA256_m_l2กำลัง(7) = CLng(128)
SHA256_m_l2กำลัง(8) = CLng(256)
SHA256_m_l2กำลัง(9) = CLng(512)
SHA256_m_l2กำลัง(10) = CLng(1024)
SHA256_m_l2กำลัง(11) = CLng(2048)
SHA256_m_l2กำลัง(12) = CLng(4096)
SHA256_m_l2กำลัง(13) = CLng(8192)
SHA256_m_l2กำลัง(14) = CLng(16384)
SHA256_m_l2กำลัง(15) = CLng(32768)
SHA256_m_l2กำลัง(16) = CLng(65536)
SHA256_m_l2กำลัง(17) = CLng(131072)
SHA256_m_l2กำลัง(18) = CLng(262144)
SHA256_m_l2กำลัง(19) = CLng(524288)
SHA256_m_l2กำลัง(20) = CLng(1048576)
SHA256_m_l2กำลัง(21) = CLng(2097152)
SHA256_m_l2กำลัง(22) = CLng(4194304)
SHA256_m_l2กำลัง(23) = CLng(8388608)
SHA256_m_l2กำลัง(24) = CLng(16777216)
SHA256_m_l2กำลัง(25) = CLng(33554432)
SHA256_m_l2กำลัง(26) = CLng(67108864)
SHA256_m_l2กำลัง(27) = CLng(134217728)
SHA256_m_l2กำลัง(28) = CLng(268435456)
SHA256_m_l2กำลัง(29) = CLng(536870912)
SHA256_m_l2กำลัง(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
จบหมวดย่อย
Class_Terminate ย่อยส่วนตัว
จบหมวดย่อย
'ฟังก์ชันอาร์เรย์การแปลงการถ่ายโอนอักขระ
ฟังก์ชั่นส่วนตัว ConvertToWordArray (byVal sMessage)
Dim lMessageLength
หรี่จำนวนคำ
หรี่ lWordArray()
Dim lBytePosition
หรี่ lByteCount
Dim lWordCount
ค่าคงที่ MODULUS_BITS = 512
ค่าคงที่ CONGRUENT_BITS = 448
lMessageLength = Len(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD)
ลดขนาด lWordArray(lNumberOfWords - 1)
lตำแหน่งไบต์ = 0
lByteCount = 0
ทำจนกระทั่ง lByteCount >= lMessageLength
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (ตัวดัดแปลง lByteCount 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 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ค่า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits = 31 แล้ว
ถ้า lValue และ 1 แล้ว
LShift = &H80000000
อื่น
LShift = 0
สิ้นสุดถ้า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits < 0 หรือ iShiftBits > 31 จากนั้น
ผิดพลาดยก 6
สิ้นสุดถ้า
ถ้า (lValue และ 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
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits = 31 แล้ว
ถ้า lValue และ &H80000000 แล้ว
RShift = 1
อื่น
RShift = 0
สิ้นสุดถ้า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits < 0 หรือ iShiftBits > 31 จากนั้น
ผิดพลาดยก 6
สิ้นสุดถ้า
RShift = (lValue และ &H7FFFFFFE) / MD5_m_l2Power(iShiftBits)
ถ้า (lValue และ &H80000000) แล้ว
RShift = (RShift หรือ (&H40000000 / MD5_m_l2Power(iShiftBits - 1)))
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
'การแปลงออฟเซ็ตสตริง ใช้งานผ่านฟังก์ชันการเลื่อนด้านซ้ายและขวา
ฟังก์ชั่นส่วนตัว RotateLeft (byVal lValue, byVal iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) หรือ RShift(lValue, (32 - iShiftBits))
ฟังก์ชันสิ้นสุด
'เพิ่มการเข้ารหัสเลขฐานสิบหกที่ไม่ได้ลงนามต่อท้าย'
ฟังก์ชั่นส่วนตัว AddUnsigned (byVal lX, byVal lyY)
x4
ย4
x8
ย8
ติ่มซำผลลัพธ์
lX8 = lX และ &H80000000
ly8 = ly และ &H80000000
lX4 = lX และ &H40000000
ly4 = ly และ &H40000000
lผลลัพธ์ = (lX และ &H3FFFFFF) + (lY และ &H3FFFFFF)
ถ้า lX4 และ lY4 แล้ว
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
อย่างอื่นถ้า lX4 หรือ lY4 แล้ว
ถ้า lResult และ &H40000000 แล้ว
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
อื่น
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
สิ้นสุดถ้า
อื่น
lResult = lResult X หรือ lX8 X หรือ lY8
สิ้นสุดถ้า
AddUnsigned = lผลลัพธ์
ฟังก์ชันสิ้นสุด
'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 = เพิ่มไม่ได้ลงนาม(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 = เพิ่มไม่ได้ลงนาม(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 = เพิ่มไม่ได้ลงนาม(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 = เพิ่มไม่ได้ลงนาม(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 เอ็กซ์หรือ เอ็กซ์หรือ z)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นส่วนตัว MD5_I(x, y, z)
MD5_I = (y Xor (x หรือ (ไม่ใช่ z)))
ฟังก์ชันสิ้นสุด
'16 การแปลงการเข้ารหัสเลขฐานสิบหก
ฟังก์ชั่นส่วนตัว WordToHex (byVal lValue)
ติ่ม lByte
ติ่มซ.นับ
สำหรับ lCount = 0 ถึง 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) และ MD5_m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & ขวา(0 & Hex(lByte), 2)
ต่อไป
ฟังก์ชันสิ้นสุด
'ฟังก์ชันหลักของ MD5 MD5 (สตริง บิตการเข้ารหัส)
ฟังก์ชั่นสาธารณะ MD5 (byVal sMessage, byVal sType)
ดิมเอ็กซ์
ดิม เค
ดิมเอเอ
ดิม บีบี
ดิม ซีซี
ดิมดีดี
ดิม เอ
ดิม บี
ดิม ค
ดิม ดี
ค่าคอนสต 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: การแปลงอาร์เรย์
ก = &H67452301
ข = &HEFCDAB89
ค = &H98BADCFE
ง = &H10325476
สำหรับ k = 0 ถึง UBound(x) ขั้นตอนที่ 16
เอเอ = ก
บีบี = ข
ซีซี = ค
วว = ง
'ขั้นตอนการเข้ารหัส 2: การแปลงการเข้ารหัส
MD5_FF ก, ข, ค, ง, x(k + 0), S11, &HD76AA478
MD5_FF ง, ก, ข, ค, 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 ง, ก, ข, ค, 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 ก, ข, ค, ดี, x(k + 8), S11, &H698098D8
MD5_FF ง, ก, ข, ค, x(k + 9), S12, &H8B44F7AF
MD5_FF ค, ดี, เอ, ข, x(k + 10), S13, &HFFFF5BB1
MD5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
MD5_FF ก, ข, ค, ดี, 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 ก, ข, ค, ง, 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 ก, ข, ค, ง, x(k + 5), S21, &HD62F105D
MD5_GG ง, ก, ข, ค, 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 ก, ข, ค, ง, x(k + 9), S21, &H21E1CDE6
MD5_GG d, ก, ข, ค, 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 ก, ข, ค, ง, x(k + 13), S21, &HA9E3E905
MD5_GG ง, ก, ข, ค, 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 ก, ข, ค, ดี, x(k + 1), S31, &HA4BEEA44
MD5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
MD5_HH ค, ดี, เอ, ข, x(k + 7), S33, &HF6BB4B60
MD5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
MD5_HH ก, ข, ค, ดี, 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 ก, ข, ค, ง, x(k + 9), S31, &HD9D4D039
MD5_HH ง, ก, ข, ค, 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 ก, ข, ค, ดี, x(k + 0), S41, &HF4292244
MD5_II ง, ก, ข, ค, x(k + 7), S42, &H432AFF97
MD5_II ค, ดี, เอ, ข, x(k + 14), S43, &HAB9423A7
MD5_II b, c, d, a, x(k + 5), S44, &HFC93A039
MD5_II ก, ข, ค, ดี, x(k + 12), S41, &H655B59C3
MD5_II ง, ก, ข, ค, 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 ก, ข, ค, ดี, x(k + 8), S41, &H6FA87E4F
MD5_II ง, ก, ข, ค, 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 ก, ข, ค, ดี, x(k + 4), S41, &HF7537E82
MD5_II ง, ก, ข, ค, x(k + 11), S42, &HBD3AF235
MD5_II ค, ดี, เอ, ข, x(k + 2), S43, &H2AD7D2BB
MD5_II b, c, d, a, x(k + 9), S44, &HEB86D391
'ขั้นตอนการเข้ารหัส 3: ผนวกการแปลงที่ไม่ได้ลงนาม
a = เพิ่มไม่ได้ลงนาม(a, AA)
b = เพิ่มไม่ได้ลงนาม(b, BB)
c = เพิ่มไม่ได้ลงนาม(c, CC)
d = เพิ่มไม่ได้ลงนาม(d, DD)
ต่อไป
ถ้า sType = 32 แล้ว
'ขั้นตอนการเข้ารหัส 4: แยกและรวมการแปลงเลขฐานสิบหก 8 หลักแต่ละรายการ
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ค่า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits = 31 แล้ว
ถ้า lValue และ 1 แล้ว
SHA256_LShift = &H80000000
อื่น
SHA256_LShift = 0
สิ้นสุดถ้า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits < 0 หรือ iShiftBits > 31 จากนั้น
ผิดพลาดยก 6
สิ้นสุดถ้า
ถ้า (lValue และ 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ค่า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits = 31 แล้ว
ถ้า lValue และ &H80000000 แล้ว
SHA256_RShift = 1
อื่น
SHA256_RShift = 0
สิ้นสุดถ้า
ออกจากฟังก์ชัน
อย่างอื่นถ้า iShiftBits < 0 หรือ iShiftBits > 31 จากนั้น
ผิดพลาดยก 6
สิ้นสุดถ้า
SHA256_RShift = (lValue และ &H7FFFFFFE) / SHA256_m_l2Power(iShiftBits)
ถ้า (lValue และ &H80000000) จากนั้น
SHA256_RShift = (SHA256_RShift หรือ (&H40000000 / SHA256_m_l2Power(iShiftBits - 1)))
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นส่วนตัว SHA256_AddUnsigned (byVal lX, byVal lY)
x4
ย4
x8
ย8
ติ่มซำผลลัพธ์
lX8 = lX และ &H80000000
ly8 = ly และ &H80000000
lX4 = lX และ &H40000000
ly4 = ly และ &H40000000
lผลลัพธ์ = (lX และ &H3FFFFFF) + (lY และ &H3FFFFFF)
ถ้า lX4 และ lY4 แล้ว
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
อย่างอื่นถ้า lX4 หรือ lY4 แล้ว
ถ้า lResult และ &H40000000 แล้ว
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
อื่น
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
สิ้นสุดถ้า
อื่น
lResult = lResult X หรือ lX8 X หรือ lY8
สิ้นสุดถ้า
SHA256_AddUnsigned = lผลลัพธ์
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นส่วนตัว 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)
Dim lMessageLength
หรี่จำนวนคำ
หรี่ lWordArray()
Dim lBytePosition
หรี่ lByteCount
Dim lWordCount
ติ่ม lByte
ค่าคงที่ MODULUS_BITS = 512
ค่าคงที่ CONGRUENT_BITS = 448
lMessageLength = Len(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD)
ลดขนาด lWordArray(lNumberOfWords - 1)
lตำแหน่งไบต์ = 0
lByteCount = 0
ทำจนกระทั่ง lByteCount >= lMessageLength
lWordCount = lByteCount / BYTES_TO_A_WORD
lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE
lByte = AscB (กลาง (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)
ดิม เอ
ดิม บี
ดิม ค
ดิม ดี
ดิมอี
ฉ
ดีเอ็ม ก
ชม.
ดิม ไอ
เจ
ดิม 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
ก = แฮช(0)
ข = แฮช(1)
ค = แฮช(2)
d = แฮช(3)
อี = แฮช(4)
ฉ = แฮช(5)
ก. = แฮช(6)
ชั่วโมง = แฮช(7)
สำหรับเจ = 0 ถึง 63
ถ้า j < 16 แล้ว
W(เจ) = ม(เจ + 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))
ชั่วโมง = ก
ก. = ฉ
ฉ = อี
e = SHA256_AddUnsigned(d, T1)
ง = ค
ค = ข
ข = ก
a = SHA256_AddUnsigned(T1, T2)
ต่อไป
แฮช(0) = SHA256_AddUnsigned(ก, แฮช(0))
แฮช(1) = SHA256_AddUnsigned(b, แฮช(1))
แฮช(2) = SHA256_AddUnsigned(c, แฮช(2))
แฮช(3) = SHA256_AddUnsigned(ง, แฮช(3))
แฮช(4) = SHA256_AddUnsigned(e, แฮช(4))
แฮช(5) = SHA256_AddUnsigned(f, แฮช(5))
แฮช(6) = SHA256_AddUnsigned(g, แฮช(6))
แฮช(7) = SHA256_AddUnsigned(ซ, แฮช(7))
ต่อไป
SHA256=
ถ้า p_Len >= 8 แล้ว p_Len = 8
ถ้า p_Len <= 0 แล้ว p_Len = 2
สำหรับ i = 0 ถึง p_Len - 1
SHA256 = SHA256 & ขวา(00000000 & Hex(HASH(i)), 8)
ต่อไป
SHA256 = Lกรณี(SHA256)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นสาธารณะ EncryptMode (ByVal p_String, ByVal p_Type)
หรี่ E1s, E2s
E1s = 16 'ความยาวของการเข้ารหัสอัลกอริทึมแรกหรือ MD5 ความยาวการเข้ารหัส MD5 16 บิต
E2s = 2 ' ความยาวของวินาทีหรือการเข้ารหัสอัลกอริทึม SHA256 คือ 2*8=16 บิต ความยาวการเข้ารหัส SHA256 ความยาวการเข้ารหัสสูงสุดคือ 8*8=64 บิต
ถ้าไม่ใช่ IsNumeric(p_Type) แล้ว
p_ประเภท = 1
ElseIf p_Type > 7 หรือ p_Type < 0 จากนั้น 'ตัดสินจำนวนแผนตามค่าสูงสุดของ p_Type
p_ประเภท = 1
สิ้นสุดถ้า
ถ้าไม่ใช่ IsNumeric(E1s) แล้ว
E1s = 16
ElseIf E1s <> 16 และ E1s <> 32 จากนั้น
E1s = 16
สิ้นสุดถ้า
ถ้าไม่ใช่ IsNumeric(E2s) แล้ว
E2s = 2
อย่างอื่นถ้า E2s > 8 หรือ E2s < 0 จากนั้น
E2s = 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 สองครั้ง
EncryptMode = MD5(MD5(p_String, E1s), E2s)
กรณีที่ 5 ' SHA256 สองครั้ง
EncryptMode = SHA256(SHA256(p_String, E1s), E2s)
กรณีที่ 6 '8 บิตแรกของอัลกอริทึม MD5 และ 8 บิตสุดท้ายของอัลกอริทึม SHA256
EncryptMode = ซ้าย(MD5(p_String, E1s), 8) & ขวา(SHA256(p_String, E2s), 8)
กรณีที่ 7 ' 8 บิตแรกของอัลกอริทึม SHA256 และ 8 บิตสุดท้ายของอัลกอริทึม MD5
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 (ขวา (p_String, 1))) Mod 8)
ฟังก์ชันสิ้นสุด
จบคลาส
-
การสาธิต:
คัดลอกรหัสรหัสดังต่อไปนี้:
<!--#include file=cls_Encrypt.asp-->
-
ดิม โอ
ตั้ง o = Cls_Encrypt ใหม่
อัลกอริทึม Response.write MD5: & o.EncryptMode (ผู้ดูแลระบบ, 0) & <br />
Response.write อัลกอริทึม SHA256: & o.EncryptMode (ผู้ดูแลระบบ, 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 (ผู้ดูแลระบบ, 5) & <br />
Response.write ตัวเลข 8 หลักแรกของอัลกอริทึม MD5 และ 8 หลักสุดท้ายของอัลกอริทึม SHA256: & o.EncryptMode(admin,6) & <br />
Response.write 8 บิตแรกของอัลกอริทึม SHA256 และ 8 บิตสุดท้ายของอัลกอริทึม MD5: & o.EncryptMode(admin,7) & <br /><hr />
Response.write รับค่า AscW ของอักขระตัวสุดท้ายของรหัสผ่านและส่วนที่เหลือของ 8 เป็นค่าสัมประสิทธิ์รูปแบบการเข้ารหัส: & o.PassWordEnt(admin) & <br /><hr />
Response.write การเข้ารหัส MD5 16 บิต: & o.md5 (ผู้ดูแลระบบ, 16) & <br />
Response.write การเข้ารหัส MD5 32 บิต: & o.md5(admin,32) & <br /><hr />
Response.write การเข้ารหัส SHA256 8 บิต: & o.sha256 (ผู้ดูแลระบบ, 1) & <br />
Response.write การเข้ารหัส SHA256 16 บิต: & o.sha256 (ผู้ดูแลระบบ, 2) & <br />
Response.write การเข้ารหัส SHA256 24 บิต: & o.sha256 (ผู้ดูแลระบบ, 3) & <br />
Response.write การเข้ารหัส SHA256 32 บิต: & o.sha256 (ผู้ดูแลระบบ, 4) & <br />
Response.write การเข้ารหัส SHA256 40 บิต: & o.sha256 (ผู้ดูแลระบบ, 5) & <br />
Response.write การเข้ารหัส SHA256 48 บิต: & o.sha256 (ผู้ดูแลระบบ, 6) & <br />
Response.write การเข้ารหัส SHA256 56 บิต: & o.sha256 (ผู้ดูแลระบบ, 7) & <br />
Response.write การเข้ารหัส SHA256 64 บิต: & o.sha256 (ผู้ดูแลระบบ, 8) & <br />
ตั้ง o = ไม่มีเลย
-