博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net,C# 加密解密字符串
阅读量:6114 次
发布时间:2019-06-21

本文共 6259 字,大约阅读时间需要 20 分钟。

首先在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()); } }}

 

使用例子:

 

原文地址:

转载于:https://www.cnblogs.com/LoveJenny/archive/2011/06/15/2081116.html

你可能感兴趣的文章
基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
查看>>
Java I/O 文件加锁,压缩
查看>>
网页实战开发笔记之——最全面的HTML的头部信息介绍
查看>>
IOS 消息机制(NSNotificationCenter)
查看>>
[转载] MATLAB快捷键
查看>>
VS和Eclipse的调试功能哪个更强大?
查看>>
ReactNative踩坑日志——页面跳转之——Undefined is not an Object(evaluating this2.props.navigation.navigate)...
查看>>
shiro入门示例
查看>>
Spring实现封装自定义注解@Trimmed清除字符串前后的空格
查看>>
bootstrap-datepicker应用
查看>>
Linux如何实现开机启动程序详解(转)
查看>>
使用js冒泡实现点击空白处关闭弹窗
查看>>
通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ
查看>>
Requests: 让 HTTP 服务人类
查看>>
Android:ImageView控件显示图片
查看>>
I.MX6 Linux 3.0.35 SD boot
查看>>
Anaconda
查看>>
Linux中挂载新的磁盘到指定目录或分区
查看>>
Failed to load ApplicationContext
查看>>
详谈如何定制自己的博客园皮肤
查看>>