AES

using System;
using System.Security.Cryptography;
using System.Text; namespace Common
{
public class AESProvider
{
public static int KEYSIZE = ; /// <summary>
/// 获取随机的加密密钥
/// </summary>
/// <param name="Key"></param>
/// <param name="IV"></param>
/// <returns></returns>
public static void GenerateKey(out string Key, out string IV)
{
Key = GenerateKey();
IV = GenerateIV();
} /// <summary>
/// 获取随机的加密密钥
/// </summary>
/// <returns></returns>
public static string GenerateKey()
{
int n = KEYSIZE / ;
char[] arrChar = new char[]{
'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
'','','','','','','','','','',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
}; StringBuilder num = new StringBuilder(); Random rnd = new Random();
for (int i = ; i < n; i++)
{
num.Append(arrChar[rnd.Next(, arrChar.Length)].ToString());
} return num.ToString();
} /// <summary>
/// 获取随机的初始化向量
/// </summary>
/// <returns></returns>
public static string GenerateIV()
{
int n = KEYSIZE / ;
char[] arrChar = new char[]{
'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
'','','','','','','','','','',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
}; StringBuilder num = new StringBuilder(); Random rnd = new Random(DateTime.Now.Millisecond);
for (int i = ; i < n; i++)
{
num.Append(arrChar[rnd.Next(, arrChar.Length)].ToString());
} return num.ToString();
} /// <summary>
/// AES加密
/// </summary>
/// <param name="TextData">待加密字符</param>
/// <param name="Key">加密密钥</param>
/// <param name="IV">初始化向量</param>
/// <param name="CryptText">输出:已加密字符串</param>
/// <returns>0:成功加密 -1:待加密字符串不为能空 -2:加密密钥不能为空 -3:初始化向量字节长度不为KEYSIZE/8 -4:其他错误</returns>
public static int EncryptText(string TextData, string Key, string IV, out string CryptText)
{
CryptText = "";
TextData = TextData.Trim();
if (string.IsNullOrEmpty(TextData)) return -;
if (string.IsNullOrEmpty(Key)) return -;
if (string.IsNullOrEmpty(IV) || IV.Length != KEYSIZE / ) return -; try
{
RijndaelManaged rijndaelCipher = new RijndaelManaged(); rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = KEYSIZE;
rijndaelCipher.BlockSize = KEYSIZE; byte[] pwdBytes = Encoding.UTF8.GetBytes(Key);
byte[] ivBytes = Encoding.UTF8.GetBytes(IV); byte[] keyBytes = new byte[KEYSIZE / ];
int len = pwdBytes.Length;
if (len > keyBytes.Length) len = keyBytes.Length;
System.Array.Copy(pwdBytes, keyBytes, len); rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = ivBytes; ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
byte[] plainText = Encoding.UTF8.GetBytes(TextData);
byte[] cipherBytes = transform.TransformFinalBlock(plainText, , plainText.Length); CryptText = Convert.ToBase64String(cipherBytes); return ;
}
catch
{
return -;
}
} /// <summary>
/// AES解密
/// </summary>
/// <param name="CryptText">待解密字符串</param>
/// <param name="Key">加密密钥</param>
/// <param name="IV">初始化向量</param>
/// <param name="TextData">输出:已解密的字符串</param>
/// <returns>0:成功解密 -1:待解密字符串不为能空 -2:加密密钥不能为空 -3:初始化向量字节长度不为KEYSIZE/8 -4:其他错误</returns>
public static int DecryptText(string CryptText, string Key, string IV, out string TextData)
{
TextData = "";
if (string.IsNullOrEmpty(CryptText)) return -;
if (string.IsNullOrEmpty(Key)) return -;
if (string.IsNullOrEmpty(IV) || IV.Length != KEYSIZE / ) return -; try
{
RijndaelManaged rijndaelCipher = new RijndaelManaged(); rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = KEYSIZE;
rijndaelCipher.BlockSize = KEYSIZE; byte[] encryptedData = Convert.FromBase64String(CryptText);
byte[] pwdBytes = Encoding.UTF8.GetBytes(Key);
byte[] ivBytes = Encoding.UTF8.GetBytes(IV); byte[] keyBytes = new byte[KEYSIZE / ];
int len = pwdBytes.Length;
if (len > keyBytes.Length) len = keyBytes.Length;
System.Array.Copy(pwdBytes, keyBytes, len); rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = ivBytes; ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(encryptedData, , encryptedData.Length); TextData = Encoding.UTF8.GetString(plainText).Trim();
return ;
}
catch
{
return -;
}
}
}
}

RSA

using System;
using System.Security.Cryptography;
using System.Text; namespace Common
{
public class RSAProvider
{
public static int KEYSIZE = ;
/// <summary>
/// 自动生成公私密钥
/// </summary>
/// <param name="Modulus">输出:加密公钥</param>
/// <param name="Exponent">输入:公钥指数</param>
/// <param name="PrivateKey">输出:私钥</param>
public static void GenerateKey(out string Modulus, out string Exponent, out string PrivateKey)
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(KEYSIZE); RSAParameters pubparam = rsaProvider.ExportParameters(false);
byte[] mod = pubparam.Modulus;
byte[] exp = pubparam.Exponent; byte[] prikey = rsaProvider.ExportCspBlob(true); Modulus = Convert.ToBase64String(mod);
Exponent = Convert.ToBase64String(exp);
PrivateKey = Convert.ToBase64String(prikey);
} /// <summary>
/// RSA加密
/// </summary>
/// <param name="TextData">待加密字符</param>
/// <param name="Modulus">加密公钥</param>
/// <param name="Exponent">加密指数</param>
/// <param name="CryptText">输出:已加密字符串</param>
/// <returns>0:成功加密 -1:待加密字符串不为能空 -2:加密公钥不能为空 -3:待加密字符串超长 -4:其他错误</returns>
public static int EncryptText(string TextData, string Modulus, string Exponent, out string CryptText)
{
CryptText = "";
if (string.IsNullOrEmpty(TextData)) return -;
if (string.IsNullOrEmpty(Modulus)) return -;
if (TextData.Length > KEYSIZE / - ) return -;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KEYSIZE);
byte[] modBytes = Convert.FromBase64String(Modulus);
byte[] expBytes = Convert.FromBase64String(Exponent); RSAParameters p = new RSAParameters();
p.Modulus = modBytes;
p.Exponent = expBytes; rsa.ImportParameters(p);
byte[] plainText = Encoding.UTF8.GetBytes(TextData);
byte[] cipherBytes = rsa.Encrypt(plainText, false); CryptText = Convert.ToBase64String(cipherBytes); return ;
}
catch { return -; }
} /// <summary>
/// RSA解密
/// </summary>
/// <param name="CryptText">待解密字符串</param>
/// <param name="Key">解密私钥</param>
/// <param name="TextData">输出:已解密的字符串</param>
/// <returns>0:成功解密 -1:待解密字符串不为能空 -2:解密私钥不能为空 -4:其他错误</returns>
public static int DecryptText(string CryptText, string PrivateKey, out string TextData)
{
TextData = ""; if (string.IsNullOrEmpty(CryptText)) return -;
if (string.IsNullOrEmpty(PrivateKey)) return -; try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KEYSIZE); byte[] prikey = Convert.FromBase64String(PrivateKey); ;
rsa.ImportCspBlob(prikey); byte[] cipherBytes = Convert.FromBase64String(CryptText);
byte[] plainText = rsa.Decrypt(cipherBytes, false); TextData = Encoding.UTF8.GetString(plainText); return ;
}
catch { return -; }
}
}
}

MD5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Common
{
public class EncryptMD5
{ public static string GetMd5(string s, Encoding encoding)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();//实例化一个MD5
byte[] t = md5.ComputeHash(encoding.GetBytes(s));//生成MD5哈希值
StringBuilder sb = new StringBuilder();
for (int i = ; i < t.Length; i++)
{
sb.Append(t[i].ToString("x").PadLeft(, ''));//将哈希值转换为字符串
}
return sb.ToString().ToUpper();
}
}
}

C# 常用加密处理的更多相关文章

  1. iOS代码加密常用加密方式

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  2. PHP的几个常用加密函数(转载 https://jellybool.com/post/php-encrypt-functions)

    PHP的几个常用加密函数 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, b ...

  3. ASP.NET常用加密解密方法

    ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码           public static string ToMd5(string clearString)        ...

  4. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  5. php实现的三个常用加密解密功能函数示例

    目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...

  6. iOS常用加密方法(aes、md5、base64)

    1.代码 iOS常用加密方法(aes.md5.base64) .AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 ...

  7. PHP的几个常用加密函数

    在php的开发过程中,常常需要对部分数据(如用户密码)进行加密 一.加密类型: 1.单向散列加密 就是把任意长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出 ...

  8. JAVA常用加密解密算法Encryption and decryption

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. .NET Core 常用加密和Hash工具NETCore.Encrypt

    前言 在日常开发过程中,不可避免的涉及到数据加密解密(Hash)操作,所以就有想法开发通用工具,NETCore.Encrypt就诞生了.目前NETCore.Encrypt只支持.NET Core ,工 ...

  10. 关于Java中常用加密/解密方法的实现

    安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...

随机推荐

  1. 检测INT3 软断点

    “INT3”断点指令的机器码是 “0xcch” 检测思路,取函数地址,判断第一个字节是不是 “CCh” BYTE bFirst = ; ProcAddres = GetProcAddress(Load ...

  2. hadoop中Text类 与 java中String类的区别

    hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...

  3. Apache与Nginx的区分比较

    什么是Nginx代理代理服务器,它和Apache相比又有什么区别呢?你又该如何选择使用呢,用其中一个还是两者都用?我们将会在这里探索一下这些问题的答案. Apache服务器从1995年就开始使用了.相 ...

  4. HID高级攻击姿势:利用PowerShell脚本进行文件窃取

    0×01 引言 又到了期中考试了,我又要去偷答案了,一直发现远程下载运行exe的方式不太好,容易报毒所以这里打算用ps脚本. 0×02 关于HID HID是Human Interface Device ...

  5. 【LEETCODE OJ】Candy

    Problem link: http://oj.leetcode.com/problems/candy/ Suppose we are given an array R[1..N] that are ...

  6. 作业3-个人项目<词频统计>

    上了一天的课,现在终于可以静下来更新我的博客了.       越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”.                词频统计 单词: 包含有4个或4个以上的字 ...

  7. 4、网页制作Dreamweaver(样式表CSS)

    样式表style 制作一个风格统一的网页,需要样式表对颜色.字体等属性的规范,同时也省去在body中多次定义的麻烦,所以一个样式表是必不可少的. 样式表有两种引用的方法:一种是直接写在html的< ...

  8. Unity3D ShaderLab Use Properties

    在上一篇,学会了怎么使用ShaderLab 语法:Properties,这一次,我们将会使用属性值点亮材质球. 1:Delete>sampler2D _MainTex; 2:1行位置Add> ...

  9. DBImg: 图片文件-二进制文件的转换

    using System; using System.IO; using System.Drawing; //using System.Collections.Generic; //using Sys ...

  10. POM的配置文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...