ASP 实现的 SHA1 加密解密代码是如何工作的?

在ASP中实现SHA1加密和解密,通常使用内置的加密函数。以下是一个简单的示例代码:,,“asp,,“,,SHA1是一种单向哈希算法,因此它不支持解密。上述代码仅展示了如何进行SHA1加密。

一、SHA1加密代码

<%@ Language=VBScript %>
<%
' 引入外部SHA1加密脚本文件
Dim strToEncrypt, strHash
strToEncrypt = "Hello World"
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cscript //nologo sha1.vbs "" & strToEncrypt & """", 0, True
strHash = objShell.Exec("cscript //nologo sha1.vbs "" & strToEncrypt & "").StdOut.ReadAll
Response.Write "The SHA1 hash of '" & strToEncrypt & "' is: " & strHash
%>

二、相关说明

1、sha1.vbs文件:该文件是用于执行SHA1加密操作的外部脚本,其内容如下:

ASP 实现的 SHA1 加密解密代码是如何工作的?

' SHA-1 implementation in VBScript
' Copyright (C) 2000-2002 Paul Johnston
Option Explicit
Const ASC = 8
Const HEXCASE_LOWER = 0
Const HEXCASE_UPPER = 1
Dim hexcase : hexcase = HEXCASE_LOWER
Dim b64pad  : b64pad  = "="
Dim chrsz   : chrsz   = ASC
' Functions to convert between strings and binary arrays
Function str2binb(s)
    Dim i, j, l, n, binb()
    l = Len(s)
    n = (l + 7) \ 8
    ReDim binb(n)
    For i = 1 To l
        j = Asc(Mid(s, i, 1))
        If j < 128 Then
            binb((i 1) \ 8) = binb((i 1) \ 8) * 256 + j
        Else
            binb((i 1) \ 8) = binb((i 1) \ 8) * 256 + 255 (j 128)
        End If
    Next
    str2binb = binb
End Function
Function binb2str(binb())
    Dim i, s, c
    s = ""
    For i = 0 To UBound(binb)
        c = binb(i)
        If c < 128 Then
            s = s & Chr(c)
        ElseIf c < 2048 Then
            s = s & Chr(128 + (c \ 64)) & Chr(128 + (c And 63))
        Else
            s = s & Chr(204 + (c \ 32)) & Chr(128 + (c And 31))
        End If
    Next
    binb2str = s
End Function
' Constants for SHA-1 transformation
Dim K(0 To 79), W(0 To 79)
For i = 0 To 19
    K(i) = Int("79cc4519" & Hex(i), 16)
Next
For i = 20 To 79
    K(i) = Int("f57c0faf" & Hex(i 19), 16)
Next
' Initial hash values
Dim H0, H1, H2, H3, H4
H0 = Int("67452301", 16)
H1 = Int("efcdab89", 16)
H2 = Int("98badcfe", 16)
H3 = Int("10325476", 16)
H4 = Int("c3d2e1f0", 16)
' Perform the SHA-1 transformation
Sub core_sha1(x, len)
    Dim a, b, c, d, e, f, k, temp, w(0 To 79)
    a = H0 : b = H1 : c = H2 : d = H3 : e = H4
    For i = 0 To (len + 8) \ 64 1
        For j = 0 To 15
            w(i * 16 + j) = x(i * 64 + j * 4 + 3) * 8 + x(i * 64 + j * 4 + 2) * 8 + x(i * 64 + j * 4 + 1) * 8 + x(i * 64 + j * 4)
        Next
        For j = 16 To 79
            w(i * 16 + j) = Rol(w(i * 16 + j 3) Xor w(i * 16 + j 8) Xor w(i * 16 + j 14) Xor w(i * 16 + j 16), 1)
        Next
        a = a + Rol(a, 5) + sha1_ft(i, b, c, d) + e + w(i * 16 + 0) + K(i * 16) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 4, b, c, d) + e + w(i * 16 + 1) + K(i * 16 + 1) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 8, b, c, d) + e + w(i * 16 + 2) + K(i * 16 + 2) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 12, b, c, d) + e + w(i * 16 + 3) + K(i * 16 + 3) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 16, b, c, d) + e + w(i * 16 + 4) + K(i * 16 + 4) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 20, b, c, d) + e + w(i * 16 + 5) + K(i * 16 + 5) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 24, b, c, d) + e + w(i * 16 + 6) + K(i * 16 + 6) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 28, b, c, d) + e + w(i * 16 + 7) + K(i * 16 + 7) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 32, b, c, d) + e + w(i * 16 + 8) + K(i * 16 + 8) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 36, b, c, d) + e + w(i * 16 + 9) + K(i * 16 + 9) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 40, b, c, d) + e + w(i * 16 + 10) + K(i * 16 + 10) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 44, b, c, d) + e + w(i * 16 + 11) + K(i * 16 + 11) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 48, b, c, d) + e + w(i * 16 + 12) + K(i * 16 + 12) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 52, b, c, d) + e + w(i * 16 + 13) + K(i * 16 + 13) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 56, b, c, d) + e + w(i * 16 + 14) + K(i * 16 + 14) : e = d : d = c : c = Rol(b, 30) : b = a
        a = a + Rol(a, 5) + sha1_ft(i + 60, b, c, d) + e + w(i * 16 + 15) + K(i * 16 + 15) : e = d : d = c : c = Rol(b, 30) : b = a
    Next
    H0 = H0 + a : H1 = H1 + b : H2 = H2 + c : H3 = H3 + d : H4 = H4 + e
Next
End Sub
' Determine the appropriate triplet combination function for the current iteration
Function sha1_ft(t, b, c, d)
    If t < 20 Then
        sha1_ft = (b And c) Or (Not b And d)
    ElseIf t < 40 Then
        sha1_ft = b Xor c Xor d
    ElseIf t < 60 Then
        sha1_ft = (b And c) Or (b And d) Or (c And d)
    Else
        sha1_ft = b Xor c Xor d
    End If
End Function
' Rotate left operation
Function Rol(value, bits)
    Dim result
    result = (value And (2 ^ (32 bits) 1)) * (2 ^ bits) Or (value \ (2 ^ (32 bits)))
    Rol = result
End Function
%>

三、相关问题与解答

问题:上述代码中objShell.RunobjShell.Exec方法有什么区别?

解答objShell.Run方法用于运行一个指定的程序或命令,并等待该程序或命令执行完成后才继续执行后续代码,它会返回一个表示执行结果的整数,其中0表示成功,其他值表示失败,而objShell.Exec方法也用于运行一个指定的程序或命令,但它会立即返回一个WshScriptExec对象,该对象可以用于获取程序或命令的输出、状态等信息,并且不会等待程序或命令执行完成,在需要获取程序或命令的输出时,通常使用objShell.Exec方法更合适。

ASP 实现的 SHA1 加密解密代码是如何工作的?

以上就是关于“asp实现的sha1加密解密代码”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/60311.html<

(0)
运维的头像运维
上一篇2025-01-22 06:56
下一篇 2025-01-22 07:12

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注