zoukankan
html css js c++ java
简单的使用.NET加密
对称加密算法:
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
///
<summary>
/// 使用对称加密的例子
///
</summary>
class Class1
{
static
void
Main(
string[] args)
{
Class1 c
=
new Class1();
c.StartDemo();
}
public
void StartDemo()
{
//
establish symmetric algorithm
SymmetricAlgorithm sa
= Rijndael.Create();
//
key and iv
sa.GenerateKey();
//产生随机的 (32*8) 位的密钥
//
sa.GenerateIV();
//
初始向量,在ECB模式里面可以不用IV
sa.Mode
=
CipherMode.ECB;
//
块处理模式
sa.Padding
=
PaddingMode.Zeros;
//
末尾数据块的填充模式
Console.WriteLine("
密钥是:
"
);
for
(
int
i
=
0
; i
<
sa.Key.Length; i
++
)
{
Console.Write(
"
{0:X2}
"
,sa.Key[i]);
}
Console.WriteLine(
"
\n
"
);
//
establish crypto stream
MemoryStream ms
=
new MemoryStream();
CryptoStream cs
=
new CryptoStream(ms,sa.CreateEncryptor(),CryptoStreamMode.Write);
string
plaintext;
//
原始文本
byte
[] cipherbytes;
//
加密后的数据
byte
[] finalbytes;
//
解密后的数据
plaintext=
"
How are you? 这是一行文字。
";
byte
[] plainbytes
= Encoding.UTF8.GetBytes(plaintext);
Console.WriteLine(
"
原始文本是:\n{0}\n
",plaintext);
//
display plaint text byte array in hex format
Console.WriteLine(
"
原始数据是:
"
);
for
(
int
i
=
0
; i
<
plainbytes.Length; i
++
)
{
Console.Write(
"
{0:X2}
"
,plainbytes[i]);
}
Console.WriteLine(
"
\n
"
);
//
加密过程
cs.Write(plainbytes,
0, plainbytes.Length);
cs.Close();
cipherbytes
= ms.ToArray();
ms.Close();
//
display ciphertext byte array in hex format
Console.WriteLine(
"
加密后的数据是:
"
);
for
(
int
i
=
0
; i
<
cipherbytes.Length; i
++
)
{
Console.Write(
"
{0:X2}
"
,cipherbytes[i]);
}
Console.WriteLine(
"
\n
"
);
//
下面的为加密过程
ms
=
new MemoryStream(cipherbytes);
cs
=
new CryptoStream(ms,sa.CreateDecryptor(),CryptoStreamMode.Read);
finalbytes
=
new
byte[plainbytes.Length];
cs.Read(finalbytes,
0,plainbytes.Length);
Console.WriteLine(
"
解密后的数据是:
"
);
for
(
int
i
=
0
; i
<
finalbytes.Length; i
++
)
{
Console.Write(
"
{0:X2}
"
,finalbytes[i]);
}
Console.WriteLine(
"
\n
"
);
string
finaltext
=Encoding.UTF8.GetString(finalbytes);
Console.WriteLine(
"
解密后的文本是:\n{0}\n\n
",finaltext );
Console.WriteLine(
"
按任意键继续
");
Console.ReadLine();
}
}
非对称加密算法:
using
System;
using
System.IO;
using
System.Text;
using
System.Security.Cryptography;
/**/
///
<summary>
///
一个简单的使用.NET非对称加密算法的例子
///
本例的程序很简单,仅用于说明如何在.NET里面使用非对称(RSA)算法。
///
Kwanhong 2005.9
///
</summary>
class
Class1
{
public
static
void
Main(
string
[] args)
{
Class1 c
=
new
Class1();
c.StartDemo();
}
public
void
StartDemo()
{
//
RSA的加解密过程:
//
有 rsa1 和 rsa2 两个RSA对象。
//
现在要 rsa2 发送一段信息给 rsa1, 则先由 rsa1 发送“公钥”给 rsa2
//
rsa2 获取得公钥之后,用来加密要发送的数据内容。
//
rsa1 获取加密后的内容后,用自己的私钥解密,得出原始的数据内容。
RSACryptoServiceProvider rsa1
=
new
RSACryptoServiceProvider();
RSACryptoServiceProvider rsa2
=
new
RSACryptoServiceProvider();
string
publickey;
publickey
=
rsa1.ToXmlString(
false
);
//
导出 rsa1 的公钥
string
plaintext;
plaintext
=
"
你好吗?这是用于测试的字符串。
"
;
//
原始数据
Console.WriteLine(
"
原始数据是:\n{0}\n
"
,plaintext);
rsa2.FromXmlString(publickey);
//
rsa2 导入 rsa1 的公钥,用于加密信息
//
rsa2开始加密
byte
[] cipherbytes;
cipherbytes
=
rsa2.Encrypt(
Encoding.UTF8.GetBytes(plaintext),
false
);
/**/
/*
//////////////////////////////////////////////
*/
Console.WriteLine(
"
加密后的数据是:
"
);
for
(
int
i
=
0
; i
<
cipherbytes.Length; i
++
)
{
Console.Write(
"
{0:X2}
"
,cipherbytes[i]);
}
Console.WriteLine(
"
\n
"
);
/**/
/*
//////////////////////////////////////////////
*/
//
rsa1开始解密
byte
[] plaintbytes;
plaintbytes
=
rsa1.Decrypt(cipherbytes,
false
);
Console.WriteLine(
"
解密后的数据是:
"
);
Console.WriteLine(Encoding.UTF8.GetString(plaintbytes));
Console.ReadLine();
}
}
查看全文
相关阅读:
Intellij IDEA 构建Spring Web项目 — 用户登录功能
Intellij IDEA 快速创建Spring Web 项目
Intellij Idea 创建Web项目入门(一)
JavaScript for in的缺陷
JavaScript判断对象是否含有某个属性
【一小时入门】webpack 入门指南
webpack实例与前端性能优化
JavaScript splice() 方法
JavaScript拆分字符串并将分割的数据放到数组中
JavaScript中数组map()方法
原文地址:https://www.cnblogs.com/studio313/p/298953.html
最新文章
在linux 下查询某个进程被那个程序占用
Hadoop 基础知识
CM 安装cdh 版本及出现问题
linux 上挂载硬盘或者读取u盘数据
协同过滤算法和推荐系统分析
scala 实现算法
快速高效学习Java编程在线资源Top 20(转载)
FP-Tree -关联规则挖掘算法(转载)
php实现留言功能
一些关于树莓派的教程整理
热门文章
文档模式小记
让sublime实现js控制台(前提是安装了nodejs)
js简单实现div宽度匀速增加/减小
Spring IoC — 基于注解的配置
Spring IoC — 基于XML的配置
Spring配置概述
Bean的生命周期
BeanFactory 和 ApplicationContext
资源访问利器
Java—反射
Copyright © 2011-2022 走看看