DES加密和base64加密
DES简介:参考知乎 https://www.zhihu.com/question/36767829 和博客https://www.cnblogs.com/idreamo/p/9333753.html
BASE64简介:
DES加密代码实现
1 using System;
2 using System.Collections.Generic;
3 using System.Configuration;
4 using System.IO;
5 using System.Linq;
6 using System.Security.Cryptography;
7 using System.Text;
8 using System.Threading.Tasks;
9
10 namespace ConsoleApp2
11 {
12 public static class DESJiaMi
13 {
14
15 /// <summary>
16 /// 使用配置中的KEY,进行DES加密。
17 /// </summary>
18 /// <param name="pToEncrypt">要加密的字符串。</param>
19 /// <returns>以Base64格式返回的加密字符串。</returns>
20 public static string Encrypt(string pToEncrypt)
21 {
22 return Encrypt(pToEncrypt, ConfigurationManager.AppSettings["DESKey"] ?? "88888888");
23 }
24
25 /// <summary>
26 /// 使用配置中的KEY,进行DES解密。
27 /// </summary>
28 /// <param name="pToDecrypt">要解密的以Base64</param>
29 /// <returns>已解密的字符串。</returns>
30 public static string Decrypt(string pToDecrypt)
31 {
32 return Decrypt(pToDecrypt, ConfigurationManager.AppSettings["DESKey"] ?? "88888888");
33 }
34
35 /// <summary>
36 /// 进行DES加密。
37 /// </summary>
38 /// <param name="pToEncrypt">要加密的字符串。</param>
39 /// <param name="sKey">密钥,且必须为8位。</param>
40 /// <returns>以Base64格式返回的加密字符串。</returns>
41 public static string Encrypt(string pToEncrypt, string sKey)
42 {
43 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
44 {
45 byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
46 des.Key = ASCIIEncoding.UTF8.GetBytes(sKey);
47 des.IV = ASCIIEncoding.UTF8.GetBytes(sKey);
48 des.Mode = CipherMode.CBC;
49 des.Padding = PaddingMode.PKCS7;
50 des.BlockSize = 64;
51 System.IO.MemoryStream ms = new System.IO.MemoryStream();
52 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
53 {
54 cs.Write(inputByteArray, 0, inputByteArray.Length);
55 cs.FlushFinalBlock();
56 cs.Close();
57 }
58 string str = Convert.ToBase64String(ms.ToArray());
59 ms.Close();
60 return str;
61 }
62 }
63
64
65 /// <summary>
66 /// C# DES加密方法 返回base64字符串
67 /// Mode=CBC,PaddingMode=PKCS7,BlockSize=KeySize=64,Iv=Key长度
68 /// </summary>
69 /// <param name="encryptedValue">要加密的字符串</param>
70 /// <param name="key">密钥 为8位</param>
71 /// <returns>加密后的字符串</returns>
72 public static string DESEncrypt_Base64(string originalValue, string key)
73 {
74 try
75 {
76 if (string.IsNullOrEmpty(originalValue))
77 return "";
78 using (DESCryptoServiceProvider sa = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(key) })
79 {
80 using (ICryptoTransform ct = sa.CreateEncryptor())
81 {
82 byte[] by = Encoding.UTF8.GetBytes(originalValue);
83 using (var ms = new MemoryStream())
84 {
85 using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
86 {
87 cs.Write(by, 0, by.Length);
88 cs.FlushFinalBlock();
89 }
90 return Convert.ToBase64String(ms.ToArray());
91 }
92 }
93 }
94 }
95 catch { }
96 return "";
97 }
98
99
100 /// <summary>
101 /// C# DES解密方法返回UTF-8格式的字符串
102 /// Mode=CBC,PaddingMode=PKCS7,BlockSize=KeySize=64,Iv=Key长度
103 /// </summary>
104 /// <param name="encryptedValue">待解密的字符串</param>
105 /// <param name="key">密钥 为8位</param>
106 /// <returns>解密后的字符串</returns>
107 public static string DESDecrypt_Base64(string encryptedValue, string key)
108 {
109 try
110 {
111 if (string.IsNullOrEmpty(encryptedValue))
112 return null;
113 using (DESCryptoServiceProvider sa = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(key) })
114 {
115 using (ICryptoTransform ct = sa.CreateDecryptor())
116 {
117 byte[] byt = Convert.FromBase64String(encryptedValue);
118
119 using (var ms = new MemoryStream())
120 {
121 using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
122 {
123 cs.Write(byt, 0, byt.Length);
124 cs.FlushFinalBlock();
125 }
126 return Encoding.UTF8.GetString(ms.ToArray());
127 }
128 }
129 }
130 }
131 catch (Exception ex) { }
132 return "";
133 }
134
135 /**/
136 /// <summary>
137 /// 进行DES解密。
138 /// </summary>
139 /// <param name="pToDecrypt">要解密的以Base64</param>
140 /// <param name="sKey">密钥,且必须为8位。</param>
141 /// <returns>已解密的字符串。</returns>
142 public static string Decrypt(string pToDecrypt, string sKey)
143 {
144 byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
145 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
146 {
147 des.Key = ASCIIEncoding.UTF8.GetBytes(sKey);
148 des.IV = ASCIIEncoding.UTF8.GetBytes(sKey);
149 des.Mode = CipherMode.CBC;//加密模式(Mode)=CBC。
150 des.Padding = PaddingMode.PKCS7;//填充模式(PaddingMode)=PKCS7。
151 System.IO.MemoryStream ms = new System.IO.MemoryStream();
152 using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
153 {
154 cs.Write(inputByteArray, 0, inputByteArray.Length);
155 cs.FlushFinalBlock();
156 cs.Close();
157 }
158 string str = Encoding.UTF8.GetString(ms.ToArray());
159 ms.Close();
160 return str;
161 }
162 }
163 }
164 }
base64位加密代码实现
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp2
{
public class Base64
{
/// <summary>
/// AES base64 加密算法
/// Key 为16位
/// </summary>
/// <param name="Data">需要加密的字符串</param>
/// <param name="Key">Key 为16位 密钥</param>
/// <param name="Vector">向量</param>
/// <returns></returns>
public static string RST_AesEncrypt_Base64(string Data, string Key)
{
if (string.IsNullOrEmpty(Data))
{
return null;
}
if (string.IsNullOrEmpty(Key))
{
return null;
}
var Vector = Key.Substring(0, 16);
Byte[] plainBytes = Encoding.UTF8.GetBytes(Data);
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] Cryptograph = null; // 加密后的密文
Rijndael Aes = Rijndael.Create();
//add
Aes.Mode = CipherMode.CBC;//兼任其他语言的des
Aes.BlockSize = 128;
Aes.Padding = PaddingMode.PKCS7;
//add end
try
{
// 开辟一块内存流
using (MemoryStream Memory = new MemoryStream())
{
// 把内存流对象包装成加密流对象
using (CryptoStream Encryptor = new CryptoStream(Memory,
Aes.CreateEncryptor(bKey, bVector),
CryptoStreamMode.Write))
{
// 明文数据写入加密流
Encryptor.Write(plainBytes, 0, plainBytes.Length);
Encryptor.FlushFinalBlock(); Cryptograph = Memory.ToArray();
}
}
}
catch
{
Cryptograph = null;
}
return Convert.ToBase64String(Cryptograph);
} /// <summary>
/// AES base64 解密算法
/// Key为16位
/// </summary>
/// <param name="Data">需要解密的字符串</param>
/// <param name="Key">Key为16位 密钥</param>
/// <param name="Vector">向量</param>
/// <returns></returns>
public static string RST_AesDecrypt_Base64(string Data, string Key)
{
try
{
if (string.IsNullOrEmpty(Data))
{
return null;
}
if (string.IsNullOrEmpty(Key))
{
return null;
}
var Vector = Key.Substring(0, 16);
Byte[] encryptedBytes = Convert.FromBase64String(Data);
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] original = null; // 解密后的明文
Rijndael Aes = Rijndael.Create();
//add
Aes.Mode = CipherMode.CBC;//兼任其他语言的des
Aes.BlockSize = 128;
Aes.Padding = PaddingMode.PKCS7;
//add end
try
{
// 开辟一块内存流,存储密文
using (MemoryStream Memory = new MemoryStream(encryptedBytes))
{
//把内存流对象包装成加密流对象
using (CryptoStream Decryptor = new CryptoStream(Memory,
Aes.CreateDecryptor(bKey, bVector),
CryptoStreamMode.Read))
{
// 明文存储区
using (MemoryStream originalMemory = new MemoryStream())
{
Byte[] Buffer = new Byte[1024];
Int32 readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch
{
original = null;
}
return Encoding.UTF8.GetString(original);
}
catch { return null; }
} }
}
BASE64加密解密
public sealed class Base64
{
/// <summary>
/// Base64加密
/// </summary>
/// <param name="codeName">加密采用的编码方式</param>
/// <param name="source">待加密的明文</param>
/// <returns></returns>
public static string EncodeBase64(Encoding encode, string source)
{
byte[] bytes = encode.GetBytes(source);
try
{
encode = Convert.ToBase64String(bytes);
}
catch
{
encode = source;
}
return encode;
} /// <summary>
/// Base64加密,采用utf8编码方式加密
/// </summary>
/// <param name="source">待加密的明文</param>
/// <returns>加密后的字符串</returns>
public static string EncodeBase64(string source)
{
return EncodeBase64(Encoding.UTF8, source);
} /// <summary>
/// Base64解密
/// </summary>
/// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
/// <param name="result">待解密的密文</param>
/// <returns>解密后的字符串</returns>
public static string DecodeBase64(Encoding encode, string result)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(result);
try
{
decode = encode.GetString(bytes);
}
catch
{
decode = result;
}
return decode;
} /// <summary>
/// Base64解密,采用utf8编码方式解密
/// </summary>
/// <param name="result">待解密的密文</param>
/// <returns>解密后的字符串</returns>
public static string DecodeBase64(string result)
{
return DecodeBase64(Encoding.UTF8, result);
}
}
DES加密和base64加密的更多相关文章
- MD5加密,Base64加密/解密,AES加密/解密
1.从github上下载GTMBase64-master和AESCrypt-ObjC-master导入工程,如下图所示. 2.使用前的配置及注意事项: (1) 在build phases中的GTMBa ...
- js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那么 ...
- 步步为营-33-Md5(32)加密与Base64加密
说明: 1:直接贴码 using System; using System.Collections.Generic; using System.ComponentModel; using System ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- C# 加密解密(DES,3DES,MD5,Base64) 类
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> ...
- Java android DES+Base64加密解密
服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Ba ...
- python中常用的base64 md5 aes des crc32等的加密解密
1.base64 Python内置的base64模块可以实现base64.base32.base16.base85.urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形 ...
- Base64加密解密原理以及代码实现(VC++)
Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0- ...
- python 加密解密(base64, AES)
1. 使用base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1) print s1, s2 结果 1 2 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
(1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...
随机推荐
- 火山引擎 DataTester 背后,抖音的名字原来是 AB 测试来的
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 抖音的名字是怎么来的? 在字节跳动火山引擎技术开放日上,字节跳动副总裁杨震原曾透露过"抖音"名 ...
- 报错 PEP 8: expected 2 blank lines, found 1
PyCharm 提示:PEP 8: expected 2 blank lines, found 1 类或方法前需要空两行 解决方法:Ctrl+Alt+L 格式化一下就OK了.或者手动在前面敲一行
- DevOps 运维提醒 钉钉 机器人 群通知
应用系统在碰到运行异常等情况时,发送预警消息@群内相关人员,可以及时发出问题,观察对问题的响应情况 1. 创建一个群(可以是公司内部群) 2. 添加机器人 自定义机器人安全设置: https://op ...
- django DRF
博客目录 web应用模式 api接口 接口测试工具postman restful规范 drf安装 序列化和反序列化 CBV源码分析 drf之APIView分析 drf之Request对象分析 drf- ...
- Midjouney限时免费体验
前言 Midjourney 是一个人工智能程序,可根据文本生成图像,目前架设在 Discord 频道上.于 2022 年 7 月 12 日进入公开测试阶段,使用者可通过 Discord 的机器人指令进 ...
- JSP | application 对象详解 & 网站计数器实现
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本篇学习自:C语言中文网,部分内容转载仅供学习使用. \[QAQ \] JSP applicat ...
- 第六届蓝桥杯C++C组 A~F题题解
蓝桥杯历年国赛真题汇总:Here 1. 分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, ...
- [VS Code] 入门-自定键盘快捷键
Keyboard Shortcuts 自訂鍵盤快捷鍵 開啟設定面板 :點擊左下角管理圖示〉選擇「鍵盤快速鍵」. 編輯器開啟後,滑鼠移至變更項目上,點擊出現的變更圖示(橘框處),輸入要變更的快捷鍵組合. ...
- 阿里云张建锋:核心云产品全面 Serverless 化
11月3日,2022 杭州 · 云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型计算体系正在形成,软件研发范式正在发生新的变革,Serverless 是其中最重要的趋势之一,阿里云将坚定推进核心 ...
- idea开发常用快捷键总结
转载请注明出处: idea提供了很多的快捷键,但在开发过程中并发全用,只是常用部分快捷键,在这里总结一下,总结的不全,有好的快捷键可在评论里补充下,提前谢各位 由于很早之前用的eclipse或spri ...