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#中的序列化操作,并提供了两个示例,帮助读者更加深入地理解序列化的概念和操作方法。 什么是序列化 序列化是将一个对象转换成字节流的过程,通常用于在网络上或本地存储中传输或保存数据。在C#中,使用类库中的System.Runtime.Serialization命名空间中的类来实现序列化与反序列化操作。 如何序列化一个对象 步…

    C# 2023年5月15日
    00
  • Linux服务器下利用Docker部署.net Core项目的全过程

    Linux服务器下利用Docker部署.NET Core项目的全过程 Docker是一种轻量级的容器化技术,可以让您更轻松地部署和管理应用程序。本攻略将详细介绍如何在Linux服务器上利用Docker部署.NET Core项目的全过程。 准备工作 在开始之前,您需要完成以下准备工作: 在Linux服务器上安装Docker。 在Linux服务器上安装.NET …

    C# 2023年5月16日
    00
  • C#后端接收form-data,创建实体类教程

    下面我会详细讲解“C#后端接收form-data,创建实体类教程”的完整攻略,以及两个示例。 1. 前置知识准备 在开始讲解之前,我们需要了解一些前置知识,包括: C#语言 .NET Framework ASP.NET Core Web应用程序 2. form-data简介 form-data是一种表单数据格式,它适用于包含文件上传的HTML表单。在form…

    C# 2023年5月31日
    00
  • C#的自定义语法糖的使用详解

    C#的自定义语法糖的使用详解 什么是自定义语法糖? 自定义语法糖是指一种用于简化特定代码块的特殊语法。在C#中,通过定义类似于函数的“扩展方法”或者特殊的属性,可以提供更加便捷、易读的代码实现方式。 如何使用自定义语法糖? 通过编写自己的扩展方法或者属性,可以使用自定义的语法糖。以下是具体的实现步骤。 定义扩展方法 通过以下代码定义一个简单的扩展方法,用于在…

    C# 2023年6月6日
    00
  • Unity多语言转换工具的实现

    Unity多语言转换工具的实现攻略 背景 在Unity游戏开发应用途中,多语言支持是必不可少的功能,为了能够让游戏适应不同的国家或地区,我们需要使用多语言转换工具实现简单的针对不同语言的转换和输出。 实现方法 我们可以通过以下步骤实现Unity多语言转换工具: 1. 创建语言文件 先在项目中创建多个不同语言的语言文件(如中文语言文件、英文语言文件等),并将这…

    C# 2023年5月31日
    00
  • C#简单实现SNMP的方法

    C#简单实现SNMP的方法 简介 SNMP(Simple Network Management Protocol)是一种网络管理协议,它用于管理和监控网络上的设备。C#是一种多范式编程语言,具有强大的对象导向能力,可以方便地实现SNMP协议。 实现步骤 安装依赖库 在C#中实现SNMP需要使用NuGet包管理器的SharpSnmpLib库。您可以通过以下命令…

    C# 2023年6月7日
    00
  • 基于C#实现乱码视频效果

    基于C#实现乱码视频效果攻略 背景介绍 乱码视频是一种通过修改视频文件的二进制数据来实现的视频效果,看起来像是视频画面出现了故障、损坏或者失真。这种效果在一些电影、音乐视频和MV中经常被使用,可以让视频更具有艺术感和实验性。本文将介绍如何使用C#编程语言实现乱码视频效果。 实现步骤 了解乱码视频的原理和实现方式:乱码视频通过修改视频文件的二进制数据,使视频画…

    C# 2023年6月6日
    00
  • 分享两种实现Winform程序的多语言支持的多种解决方案

    接下来我将详细讲解Winform程序实现多语言支持的多种解决方案。 1. 利用Resx文件实现多语言支持 Resx文件是.NET中专门用于多语言支持的文件格式,可以用来存储不同语言的文本信息,在程序中通过读取Resx文件来实现不同语言的界面显示。 1.1 创建Resx文件 创建Resx文件有多种方式,这里以Visual Studio为例。 在Visual S…

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