zoukankan
html css js c++ java
数据加密标准(DES)的C#实现(2)
/**/
/*
* 数据加密标准(DES)的C#实现(2)
*
* 采用随机的密钥Key和初始化向量IV加密
* 使用随机密码的好处:系统不会产生弱密钥
* 备注:采用Base64编码格式输出密文、密钥和初始化向量
*
* 夏春涛 Email:xChuntao@163.com
* Blog:
http://bluesky521.cnblogs.com
* 运行环境:.net2.0 framework
*/
/**/
/*
* 关于DES加密中的初始化向量IV:
* 对于给定的密钥 k,不使用初始化向量的简单块密码将同一个纯文本输入块加密为
* 同一个密码文本输出块。如果您的纯文本流中有重复块,则您的密码文本流中也会
* 有重复块。如果未经授权的用户知道了您的纯文本块结构的任何信息,他们就可以
* 利用该信息来解密已知的密码文本块,并有可能重新获得您的密钥。为了防止这个
* 问题,前一个块中的信息被混合到下一个块的加密过程中。这样一来,两个相同的
* 纯文本块的输出就变得不一样了。由于此技术使用前一个块加密下一个块,因此需
* 要初始化向量来加密数据的第一个块。
*/
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Security.Cryptography;
using
System.IO;
namespace
DES_App2
{
class
Program
{
static
void
Main(
string
[] args)
{
string
str_plain_text
=
"
How are you?
"
;
Console.WriteLine(
"
原文:
"
+
str_plain_text);
string
KEY_64
=
""
;
string
IV_64
=
""
;
string
str_cypher_text
=
DES_Encrypt(str_plain_text,
out
KEY_64,
out
IV_64);
Console.WriteLine(
"
密文:
"
+
str_cypher_text);
Console.WriteLine(
"
解密:
"
+
DES_Decrypt(str_cypher_text, KEY_64, IV_64));
Console.WriteLine(
"
本次密钥:
"
+
KEY_64);
Console.WriteLine(
"
本次初始化向量:
"
+
IV_64);
Console.WriteLine();
}
DES加密/解密
#region
DES加密/解密
/**/
///
<summary>
///
DES加密
///
</summary>
///
<param name="str_plain_text">
明文
</param>
///
<param name="str_des_key">
密钥,8个字符(64bit)
</param>
///
<param name="str_des_iv">
初始向量,8个字符(64bit)
</param>
///
<returns>
密文
</returns>
static
public
string
DES_Encrypt(
string
str_plain_text,
out
string
str_des_key,
out
string
str_des_iv)
{
string
str_cypher_text
=
""
;
DESCryptoServiceProvider cryptoProvider
=
new
DESCryptoServiceProvider();
MemoryStream ms
=
new
MemoryStream();
CryptoStream cst
=
new
CryptoStream(ms, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw
=
new
StreamWriter(cst);
sw.Write(str_plain_text);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
//
-----
str_cypher_text
=
Convert.ToBase64String(ms.GetBuffer(),
0
, (
int
)ms.Length);
str_des_key
=
Convert.ToBase64String(cryptoProvider.Key);
str_des_iv
=
Convert.ToBase64String(cryptoProvider.IV);
return
str_cypher_text;
}
/**/
///
<summary>
///
DES解密
///
</summary>
///
<param name="str_cypher_text">
密文
</param>
///
<param name="str_des_key">
密钥,8个字符(64bit)
</param>
///
<param name="str_des_iv">
初始向量,8个字符(64bit)
</param>
///
<returns>
明文
</returns>
static
public
string
DES_Decrypt(
string
str_cypher_text,
string
str_des_key,
string
str_des_iv)
{
string
str_plain_text
=
""
;
byte
[] byKey
=
Convert.FromBase64String(str_des_key);
byte
[] byIV
=
Convert.FromBase64String(str_des_iv);
byte
[] byEnc;
try
{
byEnc
=
Convert.FromBase64String(str_cypher_text);
}
catch
{
return
null
;
}
DESCryptoServiceProvider cryptoProvider
=
new
DESCryptoServiceProvider();
MemoryStream ms
=
new
MemoryStream(byEnc);
CryptoStream cst
=
new
CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr
=
new
StreamReader(cst);
str_plain_text
=
sr.ReadToEnd();
return
str_plain_text;
}
#endregion
}
}
源码附件:
/Files/bluesky521/DES_Hash_Demo.rar
查看全文
相关阅读:
提升ASP.NET性能
人性的弱点
墨菲定律
沟通
网站
程序员思维模式
CSS
HTML
路由和数据传递(04)
Sql Server中查看所有数据库,表名,字段名以及字段类型
原文地址:https://www.cnblogs.com/SummerRain/p/1005570.html
最新文章
php输出语句 echo print printf print_r var_dump sprintf
Linux常用命令学习笔记——基于CentOS 7
关于Jupyter Notebook无法自动补全(Autocompletion),报错TypeError: __init__() got an unexpected keyword argument 'column' 的解决方案
基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划
QGIS 3.14插件开发——Win10系统PyCharm开发环境搭建四步走
QGIS 插件开发Debug教程——使用Pycharm
从零开始安装搭建win10与ubuntu20.04双系统开发环境——集安装、配置、软件、美化、常见问题等于一体的——超详细教程
Exception in thread "main" java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序
postgreSQL使用sql归一化数据表的某列,以及出现“字段 ‘xxx’ 必须出现在 GROUP BY 子句中或者在聚合函数中”错误的可能原因之一
热门文章
openlayers API实现鹰眼图OverviewMap时地图不断闪烁等问题的解决思路
[学习记录] 使用C#语言调用.dll(动态链接库)文件
[解决异常] 未经处理的异常 "无法加载 DLL“lib/xxx.dll”: 找不到指定的模块"
[解决问题]未知的生成错误“已添加了具有相同键的项”(SVN进行更新后冲突,冲突解决等操作导致,并且无法定位到代码)
[解决问题] 当前上下文中不存在名称“InitializeComponent”
[解决问题]无法从用法中推导出方法... 的类型实参,请尝试显式指定类型实参
[学习记录].net 项目重命名详解
[解决问题]“关键字‘User’附近有语法错误”
[解决警告]MD5加密已过时
人际交往心理学
Copyright © 2011-2022 走看看