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#开发中关于加密解密字符串的使用方法相关推荐

  1. linux 系统中默认加密解密一个文件的方法

    tar -zcf - 要加密的文件名称 |openssl des3 -salt -k 密码 | dd of=加密后的文件.des dd if=加密后的文件.des |openssl des3 -d - ...

  2. php字符串加密解密源码,PHP中加密解密字符串函数源代码

    PHP中加密解密字符串函数源代码: /** *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ / ...

  3. XXTea 加密/解密 字符串

    xxtea 加密和解密的参数都是字节数组, 开发中的加密内容和密钥一般是字符串, 于是自己写了一个类实现 XXtea 加密/解密字符串功能: 类:XXTeaUtil.java package xxte ...

  4. php 字符串缩短 解密,PHP的加密解密字符串函数

    程序中经常使用的PHP加密解密字符串函数 /********************************************************************* 函数名称:enc ...

  5. c语言字符串md5加密解密,.net core使用MD5加密解密字符串

    本文实例为大家分享了.net core使用MD5加密解密字符串的具体代码,供大家参考,具体内容如下 /// /// 加密 /// /// 要加密的文本 /// 秘钥 /// public static ...

  6. java rsa 解密_Java中RSA加密解密的实现方法分析

    本文实例讲述了Java中RSA加密解密的实现方法.分享给大家供大家参考,具体如下: public static void main(String[] args) throws Exception { ...

  7. iOS开发-DES加密解密算法

    前几天后台给了一个Java代码的加解密方式,让我这边直接用.我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下 1.使用DES加密: //加密 +(NSString *) en ...

  8. asp php base64 加密解密,base64加密解密_php base64_decode 解码方法

    base64加密解密_php base64_decode 解码方法 观点1: php实现base64加密解密 在PHP中我们可以直接使用PHP自带的函数 base64_encode() 和 base6 ...

  9. 项目开发中常用JS表单取值方法

    项目开发中常用JS表单取值方法 一.常用表单基本取值方法(form1为表单名称,TextBox1为控件ID,以文本框为例,html控件与web服务器控件是一样的)         1.form1.Te ...

最新文章

  1. 资源 | 100+个自然语言处理数据集大放送,再不愁找不到数据!
  2. Centos/RedHat 7/6/5切换阿里云源并安装EPEL/IUS/REMI仓库
  3. 提高你的Java代码质量吧:如果有必要,使用变长数组吧
  4. .ajax跳过不执行,使用ajax跳过路由器登录界面
  5. 设置mysql整形_mysql 整型字段设计
  6. OpenCASCADE:拓扑 API之3D模型Defeaturing
  7. 2016年第七届蓝桥杯 - 国赛 - C/C++大学B组 - D. 机器人塔
  8. ES6:Set和Map
  9. Hotel POJ - 3667(线段树 + 区间合并
  10. 【英语学习】【Daily English】U08 Dating L01 She is the one for me.
  11. 数据结构之树的定义及操作
  12. [摘译]js内存泄漏常见的四种情况
  13. 经典排序算法(十七)--计数排序Counting Sort
  14. 用SQL语言操作数据
  15. 打开visio后屏幕会不停的抖动是怎么回事
  16. html符号中文含义大全特殊,中文标点符号大全名称
  17. 无源滤波器和有源滤波器有什么区别?-道合顺大数据infinigo
  18. PLC状态机编程第一篇-状态机介绍
  19. Arduino PS2手柄小车代码
  20. 瑞星网络版数据库中 客户端IP地址如何查看?

热门文章

  1. python训练数据集_Python——sklearn提供的自带的数据集
  2. trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
  3. html手机怎么样删除掉,怎么样才能删除这个叫做(手机模拟器大师)的软件?...
  4. sublime php 乱码,sublime打开TXT文件乱码的问题
  5. php header 重定向 url不变_PHP实现页面跳转功能
  6. vsftp匿名访问目录_vsftp 匿名访问设置设置
  7. js 改变change方法_Linux 中改变主机名的 4 种方法 | Linux 中国
  8. .net 程序加密方法
  9. C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
  10. servlet的的生命周期和使用