C#开发中关于加密解密字符串的使用方法
C#开发中关于加密解密字符串的使用方法
C#加密解密字符串方法
首先在web.config | app.config 文件下增加如下代码:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="IV" value="SuFjcEmp/TE="/>
<add key="Key" value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
</appSettings>
</configuration>
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;/// <summary>
///构造函数
/// </summary>
public CryptoHelper()
{
IV = ConfigurationManager.AppSettings["IV"];
Key = ConfigurationManager.AppSettings["Key"];
}
}
注意添加System.Configuration.dll程序集引用。
在获得了IV 和Key 之后,需要获取提供加密服务的Service 类。
在这里,使用的是System.Security.Cryptography; www.3ppt.com 命名空间下的TripleDESCryptoServiceProvider类。
获取TripleDESCryptoServiceProvider 的方法如下:
/// <summary>
/// 获取加密服务类
/// </summary>
/// <returns></returns>
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 进行转换。
完整的加密字符串代码如下:
/// <summary>
/// 获取加密后的字符串
/// </summary>
/// <param name="inputValue">输入值.</param>
/// <returns></returns>
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);
}解密方法也类似:
/// <summary>
/// 获取解密后的值
/// </summary>
/// <param name="inputValue">经过加密后的字符串.</param>
/// <returns></returns>
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"];
}/// <summary>
/// 获取加密后的字符串
/// </summary>
/// <param name="inputValue">输入值.</param>
/// <returns></returns>
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);
}/// <summary>
/// 获取加密服务类
/// </summary>
/// <returns></returns>
private TripleDESCryptoServiceProvider GetCryptoProvider()
{
TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();provider.IV = Convert.FromBase64String(IV);
provider.Key = Convert.FromBase64String(Key);return provider;
}
/// <summary>
/// 获取解密后的值
/// </summary>
/// <param name="inputValue">经过加密后的字符串.</param>
/// <returns></returns>
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/manloudoushiwo/archive/2011/06/15/2081792.html
C#开发中关于加密解密字符串的使用方法相关推荐
- linux 系统中默认加密解密一个文件的方法
tar -zcf - 要加密的文件名称 |openssl des3 -salt -k 密码 | dd of=加密后的文件.des dd if=加密后的文件.des |openssl des3 -d - ...
- php字符串加密解密源码,PHP中加密解密字符串函数源代码
PHP中加密解密字符串函数源代码: /** *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ / ...
- XXTea 加密/解密 字符串
xxtea 加密和解密的参数都是字节数组, 开发中的加密内容和密钥一般是字符串, 于是自己写了一个类实现 XXtea 加密/解密字符串功能: 类:XXTeaUtil.java package xxte ...
- php 字符串缩短 解密,PHP的加密解密字符串函数
程序中经常使用的PHP加密解密字符串函数 /********************************************************************* 函数名称:enc ...
- c语言字符串md5加密解密,.net core使用MD5加密解密字符串
本文实例为大家分享了.net core使用MD5加密解密字符串的具体代码,供大家参考,具体内容如下 /// /// 加密 /// /// 要加密的文本 /// 秘钥 /// public static ...
- java rsa 解密_Java中RSA加密解密的实现方法分析
本文实例讲述了Java中RSA加密解密的实现方法.分享给大家供大家参考,具体如下: public static void main(String[] args) throws Exception { ...
- iOS开发-DES加密解密算法
前几天后台给了一个Java代码的加解密方式,让我这边直接用.我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下 1.使用DES加密: //加密 +(NSString *) en ...
- asp php base64 加密解密,base64加密解密_php base64_decode 解码方法
base64加密解密_php base64_decode 解码方法 观点1: php实现base64加密解密 在PHP中我们可以直接使用PHP自带的函数 base64_encode() 和 base6 ...
- 项目开发中常用JS表单取值方法
项目开发中常用JS表单取值方法 一.常用表单基本取值方法(form1为表单名称,TextBox1为控件ID,以文本框为例,html控件与web服务器控件是一样的) 1.form1.Te ...
最新文章
- 资源 | 100+个自然语言处理数据集大放送,再不愁找不到数据!
- Centos/RedHat 7/6/5切换阿里云源并安装EPEL/IUS/REMI仓库
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
- .ajax跳过不执行,使用ajax跳过路由器登录界面
- 设置mysql整形_mysql 整型字段设计
- OpenCASCADE:拓扑 API之3D模型Defeaturing
- 2016年第七届蓝桥杯 - 国赛 - C/C++大学B组 - D. 机器人塔
- ES6:Set和Map
- Hotel POJ - 3667(线段树 + 区间合并
- 【英语学习】【Daily English】U08 Dating L01 She is the one for me.
- 数据结构之树的定义及操作
- [摘译]js内存泄漏常见的四种情况
- 经典排序算法(十七)--计数排序Counting Sort
- 用SQL语言操作数据
- 打开visio后屏幕会不停的抖动是怎么回事
- html符号中文含义大全特殊,中文标点符号大全名称
- 无源滤波器和有源滤波器有什么区别?-道合顺大数据infinigo
- PLC状态机编程第一篇-状态机介绍
- Arduino PS2手柄小车代码
- 瑞星网络版数据库中 客户端IP地址如何查看?
热门文章
- python训练数据集_Python——sklearn提供的自带的数据集
- trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
- html手机怎么样删除掉,怎么样才能删除这个叫做(手机模拟器大师)的软件?...
- sublime php 乱码,sublime打开TXT文件乱码的问题
- php header 重定向 url不变_PHP实现页面跳转功能
- vsftp匿名访问目录_vsftp 匿名访问设置设置
- js 改变change方法_Linux 中改变主机名的 4 种方法 | Linux 中国
- .net 程序加密方法
- C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
- servlet的的生命周期和使用