zoukankan
html css js c++ java
数据加密标准(DES)的C#实现(4)
/**/
/*
* 数据加密标准(DES)的C#实现(4)
*
* 采用自定义的密钥Key和初始化向量IV加密
*
* 夏春涛 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_App4
{
class
Program
{
static
void
Main(
string
[] args)
{
string
str_plain_text
=
"
How are you?
"
;
//
原文
Console.WriteLine(
"
原文:
"
+
str_plain_text);
string
KEY_64
=
"
a4G-8=Jk
"
;
//
必须是8个字符(64Bit)
string
IV_64
=
"
JKbN=5[?
"
;
//
必须8个字符(64Bit)
Console.WriteLine(
"
密钥:
"
+
KEY_64);
Console.WriteLine(
"
初始化向量:
"
+
IV_64);
//
----
string
str_cypher_text
=
Encrypt(str_plain_text, KEY_64, IV_64);
Console.WriteLine(
"
密文:
"
+
str_cypher_text);
Console.WriteLine(
"
解密:
"
+
Decrypt(str_cypher_text, KEY_64, IV_64) );
Console.WriteLine();
}
static
public
string
Encrypt(
string
PlainText,
string
KEY_64,
string
IV_64)
{
byte
[] byKey
=
System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte
[] byIV
=
System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
DESCryptoServiceProvider cryptoProvider
=
new
DESCryptoServiceProvider();
int
i
=
cryptoProvider.KeySize;
MemoryStream ms
=
new
MemoryStream();
CryptoStream cst
=
new
CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw
=
new
StreamWriter(cst);
sw.Write(PlainText);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return
Convert.ToBase64String(ms.GetBuffer(),
0
, (
int
)ms.Length);
}
static
public
string
Decrypt(
string
CypherText,
string
KEY_64,
string
IV_64)
{
byte
[] byKey
=
System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte
[] byIV
=
System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
byte
[] byEnc;
try
{
byEnc
=
Convert.FromBase64String(CypherText);
}
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);
return
sr.ReadToEnd();
}
}
}
源码附件:
/Files/bluesky521/DES_Hash_Demo.rar
查看全文
相关阅读:
C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框
C#开发BIMFACE系列43 服务端API之图纸拆分
C#开发BIMFACE系列42 服务端API之图纸对比
利用 OpenVINO 进行推理加速(一)
虚拟化技术概述(一)
利用目标跟踪来提高实时人脸识别处理速度
目标追踪(Object Tracking)概念的简要介绍
Python3 使用IMAP接收邮件
Git使用
Git基础
原文地址:https://www.cnblogs.com/SummerRain/p/1005582.html
最新文章
Java应用故障排查(CPU占用高、内存占用高、Full GC频繁等)
Linux面试题
Redis面试题
MySQL面试题
XLaunch远程应用支持
使用shap解释预测结果
matplotlib 支持中文
Normal Equation
记一道2021浙江省赛的Web题
云函数(变相代理池)的三种常见利用
热门文章
复习 Array,重学 JavaScript
C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用
C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案
C#开发BIMFACE系列51 Web网页中使用Vue.js加载模型与图纸
C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸
C#开发BIMFACE系列49 Web网页中加载模型与图纸的技术方案
C#开发BIMFACE系列47 IIS部署并加载离线数据包
C#开发BIMFACE系列48 Nginx部署并加载离线数据包
C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解
C#开发BIMFACE系列45 服务端API之创建离线数据包
Copyright © 2011-2022 走看看