asp实现的sha1加密解密代码(和C#兼容)

下面是详细讲解“ASP实现的SHA1加密解密代码(和C#兼容)”的攻略:

概述

SHA1(Secure Hash Algorithm 1)是一种常用的哈希算法。在ASP中,可以使用VBScript或者JScript来实现SHA1加密解密操作。下面我们就来介绍如何在ASP中实现SHA1加密解密操作,并且使代码与C#兼容。

实现步骤

1. 引入JavaScript库

ASP中常用的JavaScript库有两个,一个是Micorosoft的JScript,另一个是Netscape的JavaScript。两者针对的浏览器不同,网站要兼容不同的浏览器,可以将这两个JavaScript库都引入,在使用时根据浏览器类型进行选择。引入JavaScript库的代码如下:

<!–#include virtual="/javaScript/netscape.js"–>
<!–#include virtual=”/javaScript/msie.js”–>

2. 实现SHA1加密操作

首先,需要将需要加密的字符串转化为二进制字节流。使用VBScript实现该操作的代码如下:

Function StrToHex(ByRef strData)
    Dim objSHA1, objStream, arrData, intI

    Set objSHA1 = Server.CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
    Set objStream = Server.CreateObject("ADODB.Stream")

    objStream.Type = 2 
    objStream.CharSet = "iso-8859-1" 

    objStream.Open 
    objStream.WriteText strData 
    objStream.Position = 0 
    objStream.Type = 1 

    arrData = objStream.Read 

    StrToHex = ""

    For intI = 1 To Lenb(arrData) 
        StrToHex = StrToHex & Right("0" & Hex(Ascb(Midb(arrData, intI, 1))), 2)
    Next 

    objStream.Close  

    Set objSHA1 = Nothing 
    Set objStream = Nothing 

End Function

上述代码中,首先创建了一个系统安全哈希计算的实例对象,然后定义了一个二进制流对象,将需要加密的字符串写入该对象,并执行SHA1加密算法。最后将加密后的二进制结果转换为16进制字符串。在VBScript中,字节数组的长度不能超过32767,因此,需要对一个字符串进行分段加密,最后合并。

3. 实现SHA1解密操作

在ASP中,SHA1是不可逆的,不能实现解密操作。

4. 与C#兼容

为了与C#兼容,我们在VBScript代码中使用的是“System.Security.Cryptography.SHA1CryptoServiceProvider”这个创建SHA1实例的类,在C#中也可以使用它来实现SHA1加密。下面是在C#中实现SHA1加密的代码示例:

public static string SHA1(string strData)
{
    SHA1CryptoServiceProvider objSHA1 = new SHA1CryptoServiceProvider();
    byte[] arrData = Encoding.UTF8.GetBytes(strData);
    byte[] arrHashData = objSHA1.ComputeHash(arrData);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < arrHashData.Length; i++) 
    { 
        sb.Append(arrHashData[i].ToString("x2"));  
    }
    return sb.ToString();
}

上述代码中,我们使用了C#库中的“System.Security.Cryptography.SHA1CryptoServiceProvider”创建SHA1实例对象,并将加密后的二进制字节数组转换为16进制字符串,最后返回。

5. 示例说明

下面是两个示例,第一个是在ASP中使用VBScript实现SHA1加密操作,并返回16进制字符串的代码:

function SHA1_HEX(str)
    dim hexcase, b, c, d, e, h, l
    hexcase = 0
    str = Mid(str, 1) & Chr(128)
    Do While Len(str) Mod 64 <> 56
        str = str & Chr(0)
    Loop

    For b = 0 To Len(str) - 1 Step 64
        Dim W(79), a, i, tmpdata, tmplen

        For i = 0 To 15
            W(i) = CInt(Asc(Mid(str, b + i * 4 + 1, 1))) * &H1000000 + _
                   CInt(Asc(Mid(str, b + i * 4 + 2, 1))) * &H10000 + _
                   CInt(Asc(Mid(str, b + i * 4 + 3, 1))) * 256 + _
                   CInt(Asc(Mid(str, b + i * 4 + 4, 1)))
        Next

        For i = 16 To 79
            W(i) = RL(W(i - 3) Xor W(i - 8) Xor W(i - 14) Xor W(i - 16), 1)
        Next

        a = &H67452301
        b = &HEFCDAB89
        c = &H98BADCFE
        d = &H10325476
        e = &HC3D2E1F0

        For i = 0 To 19
            tmpdata = (RL(a, 5) + f(b, c, d) + e + W(i) + K(0)) Mod &H100000000
            e = d
            d = c
            c = RL(b, 30)
            b = a
            a = tmpdata
        Next

        For i = 20 To 39
            tmpdata = (RL(a, 5) + g(b, c, d) + e + W(i) + K(1)) Mod &H100000000
            e = d
            d = c
            c = RL(b, 30)
            b = a
            a = tmpdata
        Next

        For i = 40 To 59
            tmpdata = (RL(a, 5) + h(b, c, d) + e + W(i) + K(2)) Mod &H100000000
            e = d
            d = c
            c = RL(b, 30)
            b = a
            a = tmpdata
        Next

        For i = 60 To 79
            tmpdata = (RL(a, 5) + i(b, c, d) + e + W(i) + K(3)) Mod &H100000000
            e = d
            d = c
            c = RL(b, 30)
            b = a
            a = tmpdata
        Next

        h = (h + a) Mod &H100000000
        l = (l + b) Mod &H100000000
        d = (d + c) Mod &H100000000
        c = (c + RL(e, 2)) Mod &H100000000
        b = (b + a) Mod &H100000000
    Next

    Select Case hexcase
        Case 0 : SHA1_HEX = Left(FormatNumber(h, 0, 0), 8) & _
                                FormatNumber(l, 0, 0, 0, 0), 8)
        Case Else:
            Dim strHex
            strHex = LCase(Right("00000000" & Hex(h), 8))
            strHex = strHex & LCase(Right("00000000" & Hex(l), 8))
            SHA1_HEX = strHex
    End Select

End Function

function RL(a, b)
    RL = ((a << b) And &HFFFFFFFF) Or (a >> (32 - b))
End Function

function f(x, y, z)
    f = (x And y) Or ((Not x) And z)
End Function

function g(x, y, z)
    g = (x And y) Or (x And z) Or (y And z)
End Function

function h(x, y, z)
    h = x Xor y Xor z
End Function

function i(x, y, z)
    i = y Xor (x Or (Not z))
End Function

function K(x)
    Select Case x
        Case 0 : K = &H5A827999
        Case 1 : K = &H6ED9EBA1
        Case 2 : K = &H8F1BBCDC
        Case 3 : K = &HCA62C1D6
    End Select
End function

上述代码中,我们编写了一个函数“SHA1_HEX”,该函数实现了对输入字符串进行SHA1加密,并返回16进制字符串结果。下面我们通过一个例子来演示如何使用该函数:

dim str
str = "hello world"
Response.Write SHA1_HEX(str)

上述代码中,我们将字符串“hello world”进行SHA1加密,并将结果以16进制字符串的形式输出。

第二个示例是在C#中使用“System.Security.Cryptography.SHA1CryptoServiceProvider”创建对象,并对字符串进行SHA1加密操作。

using System;
using System.Security.Cryptography;
using System.Text;

public static string SHA1(string strData)
{
    SHA1CryptoServiceProvider objSHA1 = new SHA1CryptoServiceProvider();
    byte[] arrData = Encoding.UTF8.GetBytes(strData);
    byte[] arrHashData = objSHA1.ComputeHash(arrData);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < arrHashData.Length; i++) 
    { 
        sb.Append(arrHashData[i].ToString("x2"));  
    }
    return sb.ToString();
}

static void Main(string[] args)
{
    string str = "Hello World";
    string result = SHA1(str);
    Console.WriteLine(result);
}

上述代码中,我们实现了一个名为“SHA1”的函数,该函数实现了对输入字符串进行SHA1加密,并返回加密结果。在Main函数中,我们使用“Hello World”字符串进行SHA1加密操作,并输出加密结果。

以上就是“ASP实现的SHA1加密解密代码(和C#兼容)”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp实现的sha1加密解密代码(和C#兼容) - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#敏感词过滤实现方法

    C#敏感词过滤实现方法攻略 敏感词过滤在许多场景下都是必须的,比如社交平台的评论、发送短信等。在C#中,实现敏感词过滤的方法主要有以下两种: 方法一:正则表达式过滤 正则表达式是一种实现模式匹配的语言,我们可以利用正则表达式的特性来实现敏感词过滤。下面是使用正则表达式实现敏感词过滤的代码示例: using System.Text.RegularExpress…

    C# 2023年5月31日
    00
  • asp.net 文件下载功能函数代码整理

    我来为您详细讲解如何整理“ASP.NET文件下载功能函数代码”。 1. 准备工作 在开始整理代码之前,我们需要先创建一个空白的ASP.NET Web应用程序,以及在应用程序中添加文件下载功能所需要的按钮和相关控件。 2. 在代码中添加文件下载功能函数 我们可以在C#代码中添加文件下载功能函数,使我们能够在需要的地方直接调用该函数来实现文件下载。下面是一个简单…

    C# 2023年5月31日
    00
  • C# DataTable使用方法详解

    C# DataTable使用方法详解 什么是DataTable DataTable是一个用于表示和操作内存中表格数据的类,它模拟了数据库中的数据表,包含了一行一列的数据,每列都有唯一的名称和类型,并且可以通过对DataTable进行填充、查询、排序、筛选等操作,来完成数据的管理和处理。 如何创建DataTable 可以通过以下步骤来创建DataTable: …

    C# 2023年6月1日
    00
  • WCF的异常处理

    关于WCF的异常处理,以下是一些基本的知识点和攻略: WCF异常处理基本知识 在WCF中,所有异常都由服务契约(contract)抛出,客户端都可以通过异常处理程序处理这些异常。 WCF中异常处理程序可以在服务端和客户端都实现。 服务端和客户端都可以捕获异常并作出相应的响应,比如返回错误信息给客户端或写入设备日志。 WCF中有一些异常是常见的,比如Timeo…

    C# 2023年5月14日
    00
  • .NET中字符串比较的最佳用法

    关于“.NET中字符串比较的最佳用法”的攻略我可以给出以下内容: 1. 字符串比较的基本知识 1.1 区分大小写、不区分大小写 .NET中字符串比较默认是区分大小写的,例如 “cat” 和 “Cat” 是不相等的。但是如果要进行不区分大小写的比较,可以使用 StringComparison 枚举来指定不区分大小写的比较方式。 示例代码: string s1 …

    C# 2023年6月8日
    00
  • C#中调用Servlet示例

    下面就详细讲解“C#中调用Servlet示例”的完整攻略。 概述 在C#中调用Servlet可以使用HttpClient来实现。HttpClient是一个.NET框架的类库,它是对HTTP请求和响应的封装,可以用来发送HTTP请求和接收HTTP响应。 步骤 引入HttpClient的命名空间: using System.Net.Http; 创建HttpCli…

    C# 2023年5月15日
    00
  • C# StringBuilder.Insert()方法: 在 StringBuilder 对象的指定位置插入一个字符串

    StringBuilder.Insert() 方法用于在指定索引位置插入指定的字符串或字符。它的语法如下: public StringBuilder Insert(int index, string value); public StringBuilder Insert(int index, char value); 其中,第一个参数 index 表示要在哪…

    C# 2023年4月19日
    00
  • c#获取存储过程返回值示例分享

    当使用C#调用存储过程时,我们可以通过获取存储过程的返回值来判断该存储过程是否执行成功,例如返回0表示执行成功,而返回其他值则可能表示执行失败或者出现异常。 下面我们就来详细讲解如何通过C#获取存储过程的返回值。 示例一 在调用存储过程的时候,我们通过SqlCommand对象的ExecuteNonQuery()方法执行存储过程,该方法返回受影响的行数,而不是…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部