ASP の MD5 と SHA256 の複数の暗号化テクノロジは、文字列に基づいて暗号化タイプを取得します。これは混合暗号化であり、大きな利益は期待できません。 C#/C/C++、ASP.NET、VB.NET に移植可能または、他の種類の言語が現在利用可能です: MD5 アルゴリズム、SHA256 アルゴリズム、最初に MD5、次に SHA256、最初に SHA256、次に MD5、2 回 MD5、2 回 SHA256、MD5 アルゴリズムの最初の 8 ビット、次に SHA256 アルゴリズムの 8 ビット、最初の 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 暗号化およびその他のアルゴリズム ソース コードを読んだ後、より多くの暗号化の組み合わせと暗号化アルゴリズムをカスタマイズできます。
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
エンドサブ
プライベートサブクラス_Terminate
エンドサブ
'文字転送変換配列関数
プライベート関数 ConvertToWordArray(byVal sMessage)
Dim lMessageLength
薄暗い lNumberOfWords
Dim lWordArray()
Dim lBytePosition
ディム lByteCount
薄暗い 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)
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)
lバイトカウント = lバイトカウント + 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 = lValue
終了関数
ElseIf iShiftBits = 31 then
lValue と 1 の場合
LShift = &H80000000
それ以外
Lシフト = 0
終了の場合
終了関数
ElseIf iShiftBits < 0 または iShiftBits > 31 then
エラーレイズ6
終了の場合
If (lValue および MD5_m_l2Power(31 - iShiftBits)) then
LShift = ((lValue And 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 = lValue
終了関数
ElseIf iShiftBits = 31 then
lValue と &H80000000 の場合
Rシフト = 1
それ以外
Rシフト = 0
終了の場合
終了関数
ElseIf iShiftBits < 0 または iShiftBits > 31 then
エラーレイズ6
終了の場合
RShift = (lValue および &H7FFFFFFE) / MD5_m_l2Power(iShiftBits)
If (lValue および &H80000000) then
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)
×4
y4
x8
y8
薄暗い結果
lX8 = lX および &H80000000
lY8 = ly および &H80000000
lX4 = lX と &H40000000
lY4 = ly および &H40000000
lResult = (lX と &H3FFFFFFF) + (lY と &H3FFFFFFF)
lX4 と lY4 の場合
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 または lY4 then
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 or (Not z)))
終了機能
'16 16 進エンコード変換
プライベート関数 WordToHex(byVal lValue)
ディムlバイト
ディム・カウント
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)
ディム×
ディムk
ディムAA
ディムBB
ディムCC
ディムDD
ディム a
ディムb
ディムc
ディム・ディ
定数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 = a
BB = b
CC = c
DD = d
'暗号化ステップ 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 = AddUnsigned(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 = lValue
終了関数
ElseIf iShiftBits = 31 then
lValue と 1 の場合
SHA256_LShift = &H80000000
それ以外
SHA256_LShift = 0
終了の場合
終了関数
ElseIf iShiftBits < 0 または iShiftBits > 31 then
エラーレイズ6
終了の場合
If (lValue および SHA256_m_l2Power(31 - iShiftBits)) then
SHA256_LShift = ((lValue And 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 = lValue
終了関数
ElseIf iShiftBits = 31 then
lValue と &H80000000 の場合
SHA256_RShift = 1
それ以外
SHA256_RShift = 0
終了の場合
終了関数
ElseIf iShiftBits < 0 または iShiftBits > 31 then
エラーレイズ6
終了の場合
SHA256_RShift = (lValue および &H7FFFFFFE) / SHA256_m_l2Power(iShiftBits)
If (lValue および &H80000000) then
SHA256_RShift = (SHA256_RShift または (&H40000000 / SHA256_m_l2Power(iShiftBits - 1)))
終了の場合
終了機能
プライベート関数 SHA256_AddUnsigned(byVal lX, byVal lY)
×4
y4
x8
y8
薄暗い結果
lX8 = lX および &H80000000
lY8 = ly および &H80000000
lX4 = lX と &H40000000
lY4 = ly および &H40000000
lResult = (lX と &H3FFFFFFF) + (lY と &H3FFFFFFF)
lX4 と lY4 の場合
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 または lY4 then
If lResult And &H40000000 then
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) Xor SHA256_S(x, 13) Xor SHA256_S(x, 22))
終了機能
プライベート関数 SHA256_Sigma1(x)
SHA256_Sigma1 = (SHA256_S(x, 6) Xor SHA256_S(x, 11) Xor SHA256_S(x, 25))
終了機能
プライベート関数 SHA256_Gamma0(x)
SHA256_Gamma0 = (SHA256_S(x, 7) Xor SHA256_S(x, 18) Xor SHA256_R(x, 3))
終了機能
プライベート関数 SHA256_Gamma1(x)
SHA256_Gamma1 = (SHA256_S(x, 17) Xor SHA256_S(x, 19) Xor SHA256_R(x, 10))
終了機能
プライベート関数 SHA256_ConvertToWordArray(byVal sMessage)
Dim lMessageLength
薄暗い lNumberOfWords
Dim lWordArray()
Dim lBytePosition
ディム lByteCount
薄暗い lWordCount
ディムlバイト
定数 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)
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)
lバイトカウント = lバイトカウント + 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)
ディム a
ディムb
ディムc
ディム・ディ
薄暗い
f
ディマグラム
h
薄暗い私
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
g = f
f = e
e = SHA256_AddUnsigned(d, T1)
d = c
c = b
b = a
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 = LCase(SHA256)
終了機能
パブリック関数 EncryptMode(ByVal p_String, ByVal p_Type)
薄暗い E1、E2
E1s = 16 '最初の暗号化または MD5 アルゴリズムの長さ 16 ビット MD5 暗号化の長さ
E2s = 2 ' 2 番目または SHA256 アルゴリズム暗号化の長さは 2*8=16 ビット SHA256 暗号化長、最大暗号化長は 8*8=64 ビット
IsNumeric(p_Type) でない場合
p_Type = 1
ElseIf p_Type > 7 または p_Type < 0 then 'p_Type の最大値に基づいてプランの数を判断します
p_Type = 1
終了の場合
IsNumeric(E1s) ではない場合
E1s = 16
ElseIf E1s <> 16 かつ E1s <> 32 then
E1s = 16
終了の場合
IsNumeric(E2s) ではない場合
E2s = 2
ElseIf E2s > 8 または E2s < 0 then
E2s = 2
終了の場合
' =========================================
初めて導入するときに暗号化スキームを調整するのが最善です。現在、最大 8 つのスキームがあります。
暗号化された文字列の長さは 16 ビットで、使用中に調整できます。
' =========================================
Case 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)
ケース 6 'MD5 アルゴリズムの最初の 8 ビットと SHA256 アルゴリズムの最後の 8 ビット
EncryptMode = Left(MD5(p_String, E1s), 8) & Right(SHA256(p_String, E2s), 8)
ケース 7 ' SHA256 アルゴリズムの最初の 8 ビットと MD5 アルゴリズムの最後の 8 ビット
EncryptMode = Left(SHA256(p_String, E2s), 8) & Right(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 file=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 を 2 回実行します: & o.EncryptMode(admin,4) & <br />
Response.SHA256 を 2 回書き込みます: & 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 = 何も設定しない
%>