常用加密与解密算法示例代码
一.System.Security.Cryptography 命名空间
System.Security.Cryptography 命名空间提供加密服务,包括安全编码和解码的数据,以及许多其他操作,如哈希、 随机数字生成和消息身份验证。
Microsoft官方网址:https://msdn.microsoft.com/zh-cn/library/system.security.cryptography(v=vs.110).aspx
其中提供了des加密解密算法、HMAC、HMACSHA1、MD5、RSA 、SHA1等算法基础类。
二.部分算法代码介绍
1.单向加密--只有加密,没有解密。
1.1.MD5加密
参考代码:
private string GetMD5(string text)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
md5.Clear();
StringBuilder str = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
str.Append(data[i].ToString("X").PadLeft(2, '0'));
}
return str.ToString();
}
2.双向加密--既有加密又可以解密
2.1.对称性加密算法--使用提前商定好的密钥进行加密以及解密
2.1.1.DES加密
方法一:
/// <summary>
/// 加密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Encrypt(string Text, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray;
inputByteArray = Encoding.Default.GetBytes(Text);
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
方法二:
/// <summary>
/// DES ECB模式加密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV(当模式为ECB时,IV无用)</param>
/// <param name="str">明文的byte数组</param>
/// <returns>密文的byte数组</returns>
private string DesEncodeECB(string skey, string sdata)
{
try
{
string encryptKey = "";
if (skey.Length >= 8)
{
encryptKey = skey.Substring(0, 8);
}
else
{
encryptKey = skey;
}
byte[] key = Encoding.Default.GetBytes(encryptKey);
byte[] data = Encoding.Default.GetBytes(sdata);
// Create a MemoryStream.
MemoryStream mStream = new MemoryStream();
DESCryptoServiceProvider tdsp = new DESCryptoServiceProvider();
tdsp.Mode = CipherMode.ECB;
tdsp.Padding = PaddingMode.PKCS7;
CryptoStream cStream = new CryptoStream(mStream,
tdsp.CreateEncryptor(key, key),
CryptoStreamMode.Write);
cStream.Write(data, 0, data.Length);
cStream.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in mStream.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
cStream.Close();
mStream.Close();
return ret.ToString();
}
catch (CryptographicException e)
{
stCommon.Errors.Logs("皇包车接口中,des加密出现异常!----" + e.StackTrace + e.Message);
return null;
}
}
2.1.2.DES解密
方法一:
/// <summary>
/// 解密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Decrypt(string Text, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
int len;
len = Text.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)
{
i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
方法二:
/// <summary>
/// DES ECB模式解密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV(当模式为ECB时,IV无用)</param>
/// <param name="str">密文的byte数组</param>
/// <returns>明文的byte数组</returns>
private string DesDecodeECB(string skey, string sdata)
{
try
{
string encryptKey = skey.Substring(0, 8);
byte[] key = Encoding.Default.GetBytes(encryptKey);
byte[] data = Encoding.Default.GetBytes(sdata);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
int len;
len = sdata.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)
{
i = Convert.ToInt32(sdata.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, key), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
catch (CryptographicException e)
{
stCommon.Errors.Logs("皇包车接口中,des解密出现异常!----" + e.StackTrace + e.Message);
return null;
}
}
2.2非对称性加密算法
发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
加密算法有RSA,DSA,ECC
注:自己见解,如有错误请指出。如有补充,请写在评论区,谢谢!
常用加密与解密算法示例代码相关推荐
- aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例
本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...
- 游戏封包的加密与解密算法的破解
游戏封包的加密与解密算法的破解 破解封包的加密与解密算法是制作外挂的第一步,是外挂制作中最具技术含量的步骤,同样也是一个十分令人头痛的环节.如果加密与解密算法被成功地破解,那么外挂制作也就完成了一半. ...
- java偶校验计算代码_191120_02 Java常用加密校验转换算法汇总
Java常用加密校验转换算法汇总 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档.内容介绍Java里的常用算法的使用,包含转换Hex / ...
- 异或加密的java算法_Java使用异或运算实现简单的加密解密算法实例代码
Java简单的加密解密算法,使用异或运算 实例1: package cn.std.util; import java.nio.charset.Charset; public class DeEnCod ...
- java加密与解密工具_cat: CAT,全称Cryptographic Algorithm Tool,是一款小巧的Java加密与解密算法调用工具包...
cat 一.介绍 cat:全称Cryptographic Algorithm Tool 主要提供以下加密算法调用: 1.AES 2.DES 3.DSA 4.MD5 5.MersenneTwister( ...
- 常见的加密和解密算法—MD5
转载:https://www.cnblogs.com/maohuidong/p/7967257.html 常见的加密和解密算法-MD5 一.MD5加密概述 Message Digest Algorit ...
- PC版微信加密图片解密思路与代码实现_Python
PC版微信加密图片解密思路与代码实现_Python 前言 PC版的微信会加密存储用户接受到的所有图片信息. 存储路径为 C:\Users\用户名\Documents\WeChat Files\微信号\ ...
- C语言加密和解密算法
C语言加密和解密算法 简介:字符串的加密和解密方法一直被广泛应用,最常见的无非是 MD5 散列函数(MD5是信息摘要的一种,可以从任意长度的字符串生成128位的哈希值). 先来看代码:(注意作者代码中 ...
- 字符串加密、解密算法
字符串加密.解密算法包括: MD5.Des.Base64三种方式,详情如下所示:using System; using System.Collections.Generic; using System ...
最新文章
- NameError: name xx is not defined
- 开发日记-20190610 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- BUG You have an error in your SQL syntax; check
- 你知道应聘上一份机器学习的工作需要哪些条件吗?
- CUDA精进之路(一):图像处理——大图像分块处理(包括求均值、最大值)
- .net core websocket
- 虚拟服务器ftp文件权限修改,虚拟主机用户ftp和apache用户文件互操作权限解决方法...
- 基于HFSS阵列天线设计
- 关于SAP的用户出口
- ORA-12805: parallel query server died unexpectedly ORA-04030 (sort subheap,sort key) 原因排查与解决方法
- 高分子材料老化的内外因、性能评价与预防措施
- 你真的会用区块链赚钱吗?论区块链的商业思维
- mac下面安装破解版UltraEdit
- ping不通外网 连不上外网
- 如何将GPS手持机航点数据导出、转换格式,并用不同软件Google Earth或者ArcGIS打开?
- java 回车表示_关于JAVA中回车符的认识
- Java学习笔记之五:Nexus配置为强制从maven私服下载
- NCJLQCJT邮件系统建设方案
- 商品添加-选择商品类型自动加载商品属性
- 解决IOS无法播放3gp视频, 出现无法编码问题