安全性之加密算法

信息安全越来越重要的今天,系统设计和开发过程当中必要的加密技术必不可少,根据项目中的实际经验总结一下实际项目中安全使用场景。

系统内部密码使用md5加密,密码不可逆,不可使用任何手段让任何人获取用户的密码,如果安全级别更高一些可以多次md5或混合加密。

特殊字段的安全保密使用对称加密算法,常用的有DES/AES,对于当今的计算机发展速度,DES加密相对已经容易被破解,所以推荐使用AES进行加解密。

.Net的DES加密算法实现

/// <summary>
        /// 获取密钥
        /// </summary>
        private static string Key
        {
            get { return @"ads{}[]19123456789123456789a},ds"; }
        }

        /// <summary>
        /// 获取向量
        /// </summary>
        private static string IV
        {
            get { return @"123456789{},‘;s"; }
        }

        /// <summary>
        /// AES加密
        /// </summary>
        /// <param name="plainStr">明文字符串</param>
        /// <returns>密文</returns>
        public static string AESEncrypt(string plainStr)
        {
            byte[] bKey = Encoding.UTF8.GetBytes(Key);
            byte[] bIV = Encoding.UTF8.GetBytes(IV);
            byte[] byteArray = Encoding.UTF8.GetBytes(plainStr);

            string encrypt = null;
            Rijndael aes = Rijndael.Create();
            try
            {
                using (MemoryStream mStream = new MemoryStream())
                {
                    using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(byteArray, 0, byteArray.Length);
                        cStream.FlushFinalBlock();
                        encrypt = Convert.ToBase64String(mStream.ToArray());
                    }
                }
            }
            catch { }
            aes.Clear();

            return encrypt;
        }

        /// <summary>
        /// AES加密
        /// </summary>
        /// <param name="plainStr">明文字符串</param>
        /// <param name="returnNull">加密失败时是否返回 null,false 返回 String.Empty</param>
        /// <returns>密文</returns>
        public static string AESEncrypt(string plainStr, bool returnNull)
        {
            string encrypt = AESEncrypt(plainStr);
            return returnNull ? encrypt : (encrypt == null ? String.Empty : encrypt);
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="encryptStr">密文字符串</param>
        /// <returns>明文</returns>
        public static string AESDecrypt(string encryptStr)
        {
            byte[] bKey = Encoding.UTF8.GetBytes(Key);
            byte[] bIV = Encoding.UTF8.GetBytes(IV);
            byte[] byteArray = Convert.FromBase64String(encryptStr);

            string decrypt = null;
            Rijndael aes = Rijndael.Create();
            try
            {
                using (MemoryStream mStream = new MemoryStream())
                {
                    using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(byteArray, 0, byteArray.Length);
                        cStream.FlushFinalBlock();
                        decrypt = Encoding.UTF8.GetString(mStream.ToArray());
                    }
                }
            }
            catch { }
            aes.Clear();

            return decrypt;
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="encryptStr">密文字符串</param>
        /// <param name="returnNull">解密失败时是否返回 null,false 返回 String.Empty</param>
        /// <returns>明文</returns>
        public static string AESDecrypt(string encryptStr, bool returnNull)
        {
            string decrypt = AESDecrypt(encryptStr);
            return returnNull ? decrypt : (decrypt == null ? String.Empty : decrypt);
        }

非对称加密.net的实现:

第一步:根据上面的原理性介绍,我们需要生成公钥(发信方需要)和私钥(收信方需要),实现代码如下:
//制造公钥和私钥的方法如下:
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
string  publickey = crypt.ToXmlString(false);//公钥
string  privatekey = crypt.ToXmlString(true);//私钥
crypt.Clear();

第二步:发信方使用公钥对明文进行加密,实现代码如下:
StreamReader sr = new StreamReader(Server.MapPath("a.txt"), UTF8Encoding.UTF8);
string readpublickey = sr.ReadToEnd(); //包含 RSA 密钥信息的 XML 字符串。
sr.Close();
UTF8Encoding enc = new UTF8Encoding();
byte[] bytes = enc.GetBytes(TextBox1.Text.Trim());
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
crypt.FromXmlString(readpublickey);
bytes = crypt.Encrypt(bytes, false);
string encryttext = Convert.ToBase64String(bytes);
string abb = Server.UrlEncode(encryttext);
Response.Write("密文为:" + abb);

第三步:收信方使用私钥对密文进行解密,实现代码如下:
StreamReader sr = new StreamReader(Server.MapPath("b.txt"), UTF8Encoding.UTF8);
string readprivatekey = sr.ReadToEnd();
sr.Close();
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
UTF8Encoding enc = new UTF8Encoding();
byte[] bytes = Convert.FromBase64String(@Server.UrlDecode(TextBox1.Text.Trim()));
crypt.FromXmlString(readprivatekey);
byte[] decryptbyte = crypt.Decrypt(bytes, false);
string decrypttext = enc.GetString(decryptbyte);
Response.Write("明文为:" + decrypttext);

简单实现:

系统对外的一些接口会显示一些数据,为了这些数据的安全,接口提供的数据进行AES加密,然后客户端接收后再进行解密操作。如果你还在使用DES加密赶快进行替换吧。

后续希望研究并运用:

1、DDOS的防护技巧

2、跨站点请求伪造

3、XSS攻击

4、文件上传漏洞

5、信息垃圾过滤

时间: 2025-01-02 10:11:34

安全性之加密算法的相关文章

XShell 无法匹配的outgoing encryption算法 ,No matching outgoing encryption algorithm found

在链接的属性(SSH -> 安全性) 的加密算法列表中选择 aes256-ctr, mac加密列表中选择hmac-sha2-256,保存即可 To enable hmac-sha2-256 and aes256-ctr go to the SSH > Security page in the session properties. Click the Edit button for Encryption and MAC. Make sure everything is selected for

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能,SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,与TELNET(远程登录,明文传递)等应用相比,SSH协议提供了更好的安全性 对称加密算法 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密.加密和解密是一样的,例如密码123,都是明文,用户密码并不多,有可能其他数据密码也用这个密码,一旦截获,直接

一些常见的协议的解释http和HTTPS,session和cookie

### HTTP与HTTPSHTTP协议传输的数据都是未加密的,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输.身份认证的网络协议,要比HTTP协议安全.**HTTPS和HTTP的区别**- HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用.- HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议.- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.- HTTP的连接很简单,是无状态的:

常见加密算法

常见的加密算法可以分成三类,对称加密算法,公钥加密算法和单向加密算法. 对称加密 指加密和解密使用相同密钥的加密算法.对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性.假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦.对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去

加密算法笔记

加密算法:MD5.SHA,DES,AES,IDEA,RSA.BlowFish 一:单向散列算法 单向散列算法:1.也就是Hash算法,将任意长度的消息队列压缩成某一固定长度的函数, 2.过程不可逆,只是单向过程, 3.包括MD5,SHA,N-Hash, MD5:消息摘要算法,对输入任意长度的消息进行运算,产生一个128位的消息摘要. SHA:安全散列算法,SHA-1,SHA-256,SHA-384,SHA-512 二:对称加密算法 1.加密秘钥和解密秘钥完全相同 2.加密安全性依赖于秘钥的秘密性

Atitit。数据库 安全性 重要敏感数据加密存储解决方案

1.1. 加密存储的重要性1 1.2. 使用的加密算法aes1 1.3. 数据加密以后会有一些问题.1 1.3.1. 一个是统计,比如统计资金总额..就无法直接使用sql的sum等数据库内部聚合函数来处理了..1 1.3.2. 还有一个就是按照金额检索,比如多少资金以下的用户..1 1.1. 加密存储的重要性 特别是对于一些金融相关的,账户模块 资金模块等. 可以防止数据库管理员或者黑客直接使用数据库管理工具看到重要敏感的数据.. 必须把程序和数据库结合才能看到解密数据.大大提升安全性.. 1.

对称加密算法

对称加密算法 提示:加密内容属于高级程序员的话题!有些内容会很枯燥!注意掌握加密的思路和操作步骤即可!代码不要求会写,只要会用就行! 又称传统加密算法 加密和解密使用同一个密钥 对称加密算法示例 密钥:X 加密算法:每个字符+X 明文:Hello 密钥为 1 时加密结果:Ifmmp 密钥为 2 时加密结果:Jgnnq 优缺点 优点 算法公开.计算量小.加密速度快.加密效率高 缺点 双方使用相同钥匙,安全性得不到保证 注意事项 密钥的保密工作非常重要 密钥要求定期更换 经典算法 算法 说明 DES

非对称加密算法

介绍 非对称加密算法需要两个密钥:公开密钥(publickey) 和 私有密钥(privatekey) 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密 特点 算法强度复杂.安全性依赖于算法与密钥 加密解密速度慢 与对称加密算法的对比 对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥 非对称密钥体制有两种密钥,其中一个是公开的 RSA 算法原理 找出两个“很大”的质数:P & Q

第九章 对称加密算法--IDEA

注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 9.1.IDEA 特点: 先于AES出来取代DES 安全性极高 常用于电子邮件加密算法 9.2.实现方式 Bouncy Castle(BC,工作模式只有ECB,密钥长度为128位) 9.2.1.基于BC实现的IDEA算法 1 package com.util.idea; 2 3 import java.io.UnsupportedEncodingException; 4 import java