Asp.net,C# 加密解密字符串

首先在web.config | app.config 文件下增加如下代码: 
 
   
     
       
       
     
   

iv:加密算法的初始向量。 

key:加密算法的密钥。 

接着新建类cryptohelper,作为加密帮助类。 

首先要从配置文件中得到iv 和key。所以基本代码如下: 
public class cryptohelper 
        { 
            //private readonly string iv = “sufjcemp/te=”; 
            private readonly string iv = string.empty; 
            //private readonly string key = “kipstoilgp6fl+3gxjvmsn4iajizybbt”; 
            private readonly string key = string.empty; 

            ///

 
            ///构造函数 
            ///

 
            public cryptohelper() 
            { 
                iv = configurationmanager.appsettings[“iv”]; 
                key = configurationmanager.appsettings[“key”]; 
            } 
        } 

注意添加system.configuration.dll程序集引用。 

在获得了iv 和key 之后,需要获取提供加密服务的service 类。 

在这里,使用的是system.security.cryptography; 命名空间下的tripledescryptoserviceprovider类。 

获取tripledescryptoserviceprovider 的方法如下: 
///

 
        /// 获取加密服务类 
        ///

 
        ///  
        private tripledescryptoserviceprovider getcryptoprovider() 
        { 
            tripledescryptoserviceprovider provider = new tripledescryptoserviceprovider(); 

            provider.iv = convert.frombase64string(iv); 
            provider.key = convert.frombase64string(key); 

            return provider; 
        } 

tripledescryptoserviceprovider 两个有用的方法 

createencryptor:创建对称加密器对象icryptotransform. 

createdecryptor:创建对称解密器对象icryptotransform 

加密器对象和解密器对象可以被cryptostream对象使用。来对流进行加密和解密。 

cryptostream 的构造函数如下: 
public cryptostream(stream stream, icryptotransform transform, cryptostreammode mode); 

使用transform 对象对stream 进行转换。 

完整的加密字符串代码如下: 
///

 
        /// 获取加密后的字符串 
        ///

 
        /// 输入值. 
        ///  
        public string getencryptedvalue(string inputvalue) 
        { 
            tripledescryptoserviceprovider provider = this.getcryptoprovider(); 

            // 创建内存流来保存加密后的流 
            memorystream mstream = new memorystream(); 

            // 创建加密转换流 
            cryptostream cstream = new cryptostream(mstream, 
            provider.createencryptor(), cryptostreammode.write); 

            // 使用utf8编码获取输入字符串的字节。 
            byte[] toencrypt = new utf8encoding().getbytes(inputvalue); 

            // 将字节写到转换流里面去。 
            cstream.write(toencrypt, 0, toencrypt.length); 
            cstream.flushfinalblock(); 

            // 在调用转换流的flushfinalblock方法后,内部就会进行转换了,此时mstream就是加密后的流了。 
            byte[] ret = mstream.toarray(); 

            // close the streams. 
            cstream.close(); 
            mstream.close(); 

            //将加密后的字节进行64编码。 
            return convert.tobase64string(ret); 
        } 

解密方法也类似: 
///

 
        /// 获取解密后的值 
        ///

 
        /// 经过加密后的字符串. 
        ///  
        public string getdecryptedvalue(string inputvalue) 
        { 
            tripledescryptoserviceprovider provider = this.getcryptoprovider(); 

            byte[] inputequivalent = convert.frombase64string(inputvalue); 

            // 创建内存流保存解密后的数据 
            memorystream msdecrypt = new memorystream(); 

            // 创建转换流。 
            cryptostream csdecrypt = new cryptostream(msdecrypt, 
                                                        provider.createdecryptor(), 
                                                        cryptostreammode.write); 

            csdecrypt.write(inputequivalent, 0, inputequivalent.length); 

            csdecrypt.flushfinalblock(); 
            csdecrypt.close(); 

            //获取字符串。 
            return new utf8encoding().getstring(msdecrypt.toarray()); 
        } 

完整的cryptohelper代码如下: 
using system; 
using system.collections.generic; 
using system.linq; 
using system.text; 
using system.security.cryptography; 
using system.io; 
using system.configuration; 

namespace windowsformsapplication1 

    public class cryptohelper 
    { 
        //private readonly string iv = “sufjcemp/te=”; 
        private readonly string iv = string.empty; 
        //private readonly string key = “kipstoilgp6fl+3gxjvmsn4iajizybbt”; 
        private readonly string key = string.empty; 

        public cryptohelper() 
        { 
            iv = configurationmanager.appsettings[“iv”]; 
            key = configurationmanager.appsettings[“key”]; 
        } 

        ///

 
        /// 获取加密后的字符串 
        ///

 
        /// 输入值. 
        ///  
        public string getencryptedvalue(string inputvalue) 
        { 
            tripledescryptoserviceprovider provider = this.getcryptoprovider(); 

            // 创建内存流来保存加密后的流 
            memorystream mstream = new memorystream(); 

            // 创建加密转换流 
            cryptostream cstream = new cryptostream(mstream, 

            provider.createencryptor(), cryptostreammode.write); 
            // 使用utf8编码获取输入字符串的字节。 
            byte[] toencrypt = new utf8encoding().getbytes(inputvalue); 

            // 将字节写到转换流里面去。 
            cstream.write(toencrypt, 0, toencrypt.length); 
            cstream.flushfinalblock(); 

            // 在调用转换流的flushfinalblock方法后,内部就会进行转换了,此时mstream就是加密后的流了。 
            byte[] ret = mstream.toarray(); 

            // close the streams. 
            cstream.close(); 
            mstream.close(); 

            //将加密后的字节进行64编码。 
            return convert.tobase64string(ret); 
        } 

        ///

 
        /// 获取加密服务类 
        ///

 
        ///  
        private tripledescryptoserviceprovider getcryptoprovider() 
        { 
            tripledescryptoserviceprovider provider = new tripledescryptoserviceprovider(); 

            provider.iv = convert.frombase64string(iv); 
            provider.key = convert.frombase64string(key); 

            return provider; 

        } 

        ///

 
        /// 获取解密后的值 
        ///

 
        /// 经过加密后的字符串. 
        ///  
        public string getdecryptedvalue(string inputvalue) 
        { 
            tripledescryptoserviceprovider provider = this.getcryptoprovider(); 
            byte[] inputequivalent = convert.frombase64string(inputvalue); 

            // 创建内存流保存解密后的数据 
            memorystream msdecrypt = new memorystream(); 

            // 创建转换流。 
            cryptostream csdecrypt = new cryptostream(msdecrypt, 
            provider.createdecryptor(), 
            cryptostreammode.write); 

            csdecrypt.write(inputequivalent, 0, inputequivalent.length); 
            csdecrypt.flushfinalblock(); 

            csdecrypt.close(); 

            //获取字符串。 
            return new utf8encoding().getstring(msdecrypt.toarray()); 
        } 
    } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2553893.html

(0)
上一篇 2025年3月6日 06:51:56
下一篇 2025年3月6日 06:52:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Web Page的生命周期详解

    了解asp.net web page的生命周期对于一个做web开发的工程师来说很有必要,尤其是用于编写自己的control的时候。  asp.net web page的生命周期可以基本分为以下几个阶段:  1.  page request …

    编程技术 2025年3月6日
    200
  • 构造函数不能为虚函数

    构造函数不能声明为虚函数的原因:     1,所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是先构造父类对象,然后才能使子类对象,如果构造函数设为虚函数,那么你在构造父类的构造函数时就不得不显式的调用构造,还有一个原因就是为了防…

    编程技术 2025年3月6日
    200
  • 用C#生成不重复的随机数 – asp.net 教程

    我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net framework中提供了一个专门用来产生随机数的类system.random。  对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生…

    编程技术 2025年3月6日
    200
  • c#.net常用的小函数和方法集

    1、datetime数字型system.datetime currenttime=new system.datetime();1.1取当前年月日时分秒currenttime=system.datetime.now;1.2取当前年int年=c…

    编程技术 2025年3月6日
    200
  • ADO.NET调用存储过程

    一: 执行不带返回参数(input)的存储过程1: 首先在数据库写个存储过程, 如创建个 adduser存储过程。create proc adduser@id int,@name varchar(20),@sex varchar(20)as…

    编程技术 2025年3月6日
    200
  • asp.net下检测SQL注入式攻击代码

    两个类:(页面数据校验类)pagevalidate.cs基本通用。代码如下: 使用系统; 使用System.Text; 使用的System.Web; 使用System.Web.UI.WebControls; 使用System.Text.Re…

    编程技术 2025年3月6日
    200
  • C#学习之Reflection

    1、什么是反射: reflection,中文翻译为反射。 这是.net中获取运行时类型信息的方式 ,.net的应用程序由几个部分: ‘程序集(assembly)’、‘模块(module)’、‘类型(class)’组成,而反射提供一种编程的方…

    编程技术 2025年3月6日
    200
  • .NET 中的三种接口实现方式

    一般来说.net提供了三种不同的接口实现方式,分别为隐式接口实现、显式接口实现、混合式接口实现。这三种方式各有各的特点。 首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式。下面让我们来看…

    编程技术 2025年3月6日
    200
  • C#难点逐个击破(9):类型转换

    显式转换与隐式转换  类型之间的转换可以分为隐式转换与显式转换,如int类型可直接转换为long类型。  /*隐式转换*/ int intNum = 23; long longNum1 = intNum; 登录后复制 也可进行显式转换;  …

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 不安全代码

    C# 不安全代码 当一个代码块使用 unsafe 修饰符标记时,c# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。 指针变量 指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论