加密应用场景

目前自己接触的加密场景

  • 连接字符串里面加密
  • 用户表里面的密码加密

先总结一下这两种场景加密的差异和区别吧。连接字符串的加密根据项目的不同有的只是加密数据库连接的密码进行加密,有的是对整个字符串进行加密。只是为了在配置文件的里面的字符串让人看不懂。但是到了创建连接对象的时候还得把那一串看不懂的字符串转换成连接字符串。

用户表里面的密码,这个就不要解密、也不能解密。

好了根据这两个需求就可以写出一个简单的加密工具类

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace ConsoleApplication1
{
    public class SecretUtil
    {
        private static SymmetricAlgorithm mobjCryptoService;
        private static string Key;

        public SecretUtil() {
            mobjCryptoService = new RijndaelManaged();
            Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUdpyang76*h%(HilJ$lhj!y6&(*jkP87jH7";
        }

        /// 获得密钥
        /// </summary>
        /// <returns>密钥</returns>
        private static byte[] GetLegalKey()
        {
            string sTemp = Key;
            mobjCryptoService.GenerateKey();
            byte[] bytTemp = mobjCryptoService.Key;
            int KeyLength = bytTemp.Length;
            if (sTemp.Length > KeyLength)
                sTemp = sTemp.Substring(0, KeyLength);
            else if (sTemp.Length < KeyLength)
                sTemp = sTemp.PadRight(KeyLength, ‘ ‘);
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 获得初始向量IV
        /// </summary>
        /// <returns>初试向量IV</returns>
        private static byte[] GetLegalIV()
        {
            string sTemp = "E4ghj*Ghg7!rNIfb&95GdpyangUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
            mobjCryptoService.GenerateIV();
            byte[] bytTemp = mobjCryptoService.IV;
            int IVLength = bytTemp.Length;
            if (sTemp.Length > IVLength)
                sTemp = sTemp.Substring(0, IVLength);
            else if (sTemp.Length < IVLength)
                sTemp = sTemp.PadRight(IVLength, ‘ ‘);
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 加密方法
        /// </summary>
        /// <param name="Source">待加密的串</param>
        /// <returns>经过加密的串</returns>
        public static string Encrypto(string Source)
        {
            byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
            MemoryStream ms = new MemoryStream();
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
            cs.Write(bytIn, 0, bytIn.Length);
            cs.FlushFinalBlock();
            ms.Close();
            byte[] bytOut = ms.ToArray();
            return Convert.ToBase64String(bytOut);
        }

        /// <summary>
        /// MD5不可逆加密
        /// 32位加密
        /// </summary>
        /// <param name="s"></param>
        /// <param name="_input_charset"></param>
        /// <returns></returns>
        public static string EncryptoMd5(string s, string _input_charset)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
            StringBuilder sb = new StringBuilder(32);
            for (int i = 0; i < t.Length; i++)
            {
                sb.Append(t[i].ToString("x").PadLeft(2, ‘0‘));
            }
            return sb.ToString();
        }

        /// <summary>
        /// 解密方法
        /// </summary>
        /// <param name="Source">待解密的串</param>
        /// <returns>经过解密的串</returns>
        public static string Decrypto(string Source)
        {
            byte[] bytIn = Convert.FromBase64String(Source);
            MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs);
            return sr.ReadToEnd();
        }

    }
}
时间: 2024-10-09 23:56:44

加密应用场景的相关文章

互联网安全套路之加密、签名和证书

互联网在为我们的生活带来极大便利的情况下,也引入了很多安全隐患.比如信息在网络传输过程中可能会被黑客截取并篡改,这会带来很严重的后果.为了解决信息在网络传输过程中的安全问题,对应就产生了:加密算法.数字签名和数字证书. 一.加密算法 加密简单理解就是将一串需要传递的明文信息转换为密文信息后再进行传输.接收方收到密文后,再按照规律进行解密,得到原始的明文信息.在这个信息的传输过程中,如果被黑客截获,但是因为信息内容是密文,所以黑客也无法得知信息的具体内容,从而保障了信息的安全性. 加密算法可以分为

Linux中常见的加密技术介绍

常见的加密技术: 对称加密:非对称加密:单向加密:SSL/TLS:秘钥交换 1.对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 对称加密的常见算法:DES.3DES.AES.IDEA.RC6.CAST5等 (1)优点 加密.解密使用同一个密钥,效率高: (2)缺点 必须商定秘钥:数据传送前,双方必须商定好秘钥.线上商定,存在被窃取风险: 来源无法确认:如果钥匙被窃取,窃取者就可以冒充另一方进行通讯,接收者无法确认来源:

转:加密与解密

加密算法简介 签名算法 应用场景:检查报文正确性 方案:从报文文本中生成报文摘要 常用SHA或者MD5作为签名算法 缺点:签名算法不是加密算法,不能用来加密,作用是检查篡改 对称加密算法 应用场景:传递不适合明文传输的报文 方案:如果用一个密码把消息加密,解密的时候还用这个密码,这种加密算法就是对称加密算法 常用AES加密算法 缺点:密码需要定期更新,带来密码安全传递问题 DH密钥交换算法 应用场景:通信双方需要约定一个密码,但是又必须通过一个不安全的信道传递密码 方案:  发送方私有一个 a 

网站安全系列文章(一)加密和签名

1. 加密概述 加密应用场景 1) 密码加密,常用于登录密码和支付密码等,此类加密的特点是希望密码加密之后不能被解密,因此可以比较安全的保存密码而不会泄漏明文,因此适合用不可逆加密算法,且不需要密钥,目前这类加密算法唯一的破解方法是暴力破解,即用密码字典等手段 不可逆的加密算法有md5 2) 网络传输报文加密 网络传输如果用明文,容易被截取,之后泄漏用户敏感信息,因此对于交易类等安全要求较高的报文传输,要对其进行加密,且要选择可逆的加密算法,服务端需要解密,可以选择的加密算法有rsa,3des等

转义、编码和加密

转义.编码和加密是开发中很常见也很基础的概念.对于初学开发的开发者,可能有时会无法准确的区分着几个词.我们将通过这篇文章来了解一下“转义.编码和加密”这几个词的关联和区别. 转义 第一种转义场景 绝大多数的开发者都曾经在自己学习第一个编程语言时,就遇到了这个概念.以经典的C语言中字符串中的字符转义为例. 如果在一个字符串中存在一个",那么就需要在"前添加\才能够正常的表示,比如下面这样. char* universal_law = "月老板说:\"世界上本也不存在'

Java 将字节转化为16进制字符串

很多时候我们需要将字节数组转化为16进制字符串来保存,例如做I/O字节流操作的时候,尤其在很多加密的场景中应用都比较广泛. Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte 转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 从上面可以看出

【krpano】密码插件

密码插件可以在浏览场景或者执行action之前弹出密码输入框,要求用户输入密码.当密码输入成功了才可以进行下一步操作. 下载地址:http://pan.baidu.com/s/1gfOKKKF 给场景添加密码 1.下载插件,把插件保存在项目根目录的password文件夹下,在主XML文件中添加代码: <include url="password/pw_engine.xml" /> 2.在需要加密的场景添加password="true" <scene

Android连接指定Wifi的方法

本篇博客主要记录一下Android中打开Wifi.获取Wifi接入点信息及连接指接入点的方法. 自己写的demo主要用于测试接口的基本功能,因此界面及底层逻辑比较粗糙. demo的整体界面如下所示: 上图中的OPEN按键负责开启Wifi: GET按键负责获取扫描到的接入点信息. 当获取到接入点信息后,我选取了其中的名称及信号强度,以列表的形式显示在主界面下方,如下图: 当点击列表中的Item时,就会去连接对应的接入点. 自己的逻辑比较简单,测试时的代码,假定连接的是不许要密码或密码已知的接入点.

转:Enterprise Library 4.0缓存应用程序块

英文原文:http://msdn.microsoft.com/zh-cn/library/cc511588(en-us).aspx Enterprise Library 缓存应用程序块允许开发人员在应用程序中合并一个局部缓存,它支持内存内的缓存,和可选的可以是数据库存储或独立存储的后端存储.应用程序块可以不做修改 的使用,它提供所有必须的获取.添加和移除缓存数据的功能.可配置的到期和清除策略也是应用程序块的一部分. 在构建企业范围发布的应用程序时,架构和开发人员都要面对许多挑战,缓存可以帮助他们