zoukankan
html css js c++ java
ASP.NET加密技术的应用(加密类代码参考)
加密类代码
/**/
/*
*********************Created by Chen**************************
*如果你觉得本人的文章好,要引用请尊重著作人的劳动果实,说明
*出处以及原创作者,Thank you!!! email:aishen944-sohu.com
******************************************************************
*/
using
System;
using
System.Text;
using
System.Security;
using
System.Security.Cryptography;
using
System.IO;
namespace
EncryptClasses
{
/**/
///
<summary>
///
此处定义的是DES加密,为了便于今后的管理和维护
///
请不要随便改动密码,或者改变了密码后请一定要
///
牢记先前的密码,否则将会照成不可预料的损失
///
</summary>
public
class
DESEncrypt
{
"member fields"
#region
"member fields"
private
string
iv
=
"
12345678
"
;
private
string
key
=
"
12345678
"
;
private
Encoding encoding
=
new
UnicodeEncoding();
private
DES des;
#endregion
/**/
///
<summary>
///
构造函数
///
</summary>
public
DESEncrypt()
{
des
=
new
DESCryptoServiceProvider();
}
"propertys"
#region
"propertys"
/**/
///
<summary>
///
设置加密密钥
///
</summary>
public
string
EncryptKey
{
get
{
return
this
.key;}
set
{
this
.key
=
value;
}
}
/**/
///
<summary>
///
要加密字符的编码模式
///
</summary>
public
Encoding EncodingMode
{
get
{
return
this
.encoding;}
set
{
this
.encoding
=
value;}
}
#endregion
"methods"
#region
"methods"
/**/
///
<summary>
///
加密字符串并返回加密后的结果
///
</summary>
///
<param name="str"></param>
///
<returns></returns>
public
string
EncryptString(
string
str)
{
byte
[] ivb
=
Encoding.ASCII.GetBytes(
this
.iv);
byte
[] keyb
=
Encoding.ASCII.GetBytes(
this
.EncryptKey);
//
得到加密密钥
byte
[] toEncrypt
=
this
.EncodingMode.GetBytes(str);
//
得到要加密的内容
byte
[] encrypted;
ICryptoTransform encryptor
=
des.CreateEncryptor(keyb,ivb);
MemoryStream msEncrypt
=
new
MemoryStream();
CryptoStream csEncrypt
=
new
CryptoStream(msEncrypt,encryptor,CryptoStreamMode.Write);
csEncrypt.Write(toEncrypt,
0
,toEncrypt.Length);
csEncrypt.FlushFinalBlock();
encrypted
=
msEncrypt.ToArray();
csEncrypt.Close();
msEncrypt.Close();
return
this
.EncodingMode.GetString(encrypted);
}
/**/
///
<summary>
///
加密指定的文件,如果成功返回True,否则false
///
</summary>
///
<param name="filePath">
要加密的文件路径
</param>
///
<param name="outPath">
加密后的文件输出路径
</param>
public
void
EncryptFile(
string
filePath,
string
outPath)
{
bool
isExist
=
File.Exists(filePath);
if
(isExist)
//
如果存在
{
byte
[] ivb
=
Encoding.ASCII.GetBytes(
this
.iv);
byte
[] keyb
=
Encoding.ASCII.GetBytes(
this
.EncryptKey);
//
得到要加密文件的字节流
FileStream fin
=
new
FileStream(filePath,FileMode.Open,FileAccess.Read);
StreamReader reader
=
new
StreamReader(fin,
this
.EncodingMode);
string
dataStr
=
reader.ReadToEnd();
byte
[] toEncrypt
=
this
.EncodingMode.GetBytes(dataStr);
fin.Close();
FileStream fout
=
new
FileStream(outPath,FileMode.Create,FileAccess.Write);
ICryptoTransform encryptor
=
des.CreateEncryptor(keyb,ivb);
CryptoStream csEncrypt
=
new
CryptoStream(fout,encryptor,CryptoStreamMode.Write);
try
{
//
加密得到的文件字节流
csEncrypt.Write(toEncrypt,
0
,toEncrypt.Length);
csEncrypt.FlushFinalBlock();
}
catch
(Exception err)
{
throw
new
ApplicationException(err.Message);
}
finally
{
try
{
fout.Close();
csEncrypt.Close();
}
catch
{
;
}
}
}
else
{
throw
new
FileNotFoundException(
"
没有找到指定的文件
"
);
}
}
/**/
///
<summary>
///
文件加密函数的重载版本,如果不指定输出路径,
///
那么原来的文件将被加密后的文件覆盖
///
</summary>
///
<param name="filePath"></param>
public
void
EncryptFile(
string
filePath)
{
this
.EncryptFile(filePath,filePath);
}
/**/
///
<summary>
///
解密给定的字符串
///
</summary>
///
<param name="str">
要解密的字符
</param>
///
<returns></returns>
public
string
DecryptString(
string
str)
{
byte
[] ivb
=
Encoding.ASCII.GetBytes(
this
.iv);
byte
[] keyb
=
Encoding.ASCII.GetBytes(
this
.EncryptKey);
byte
[] toDecrypt
=
this
.EncodingMode.GetBytes(str);
byte
[] deCrypted
=
new
byte
[toDecrypt.Length];
ICryptoTransform deCryptor
=
des.CreateDecryptor(keyb,ivb);
MemoryStream msDecrypt
=
new
MemoryStream(toDecrypt);
CryptoStream csDecrypt
=
new
CryptoStream(msDecrypt,deCryptor,CryptoStreamMode.Read);
try
{
csDecrypt.Read(deCrypted,
0
,deCrypted.Length);
}
catch
(Exception err)
{
throw
new
ApplicationException(err.Message);
}
finally
{
try
{
msDecrypt.Close();
csDecrypt.Close();
}
catch
{;}
}
return
this
.EncodingMode.GetString(deCrypted);
}
/**/
///
<summary>
///
解密指定的文件
///
</summary>
///
<param name="filePath">
要解密的文件路径
</param>
///
<param name="outPath">
解密后的文件输出路径
</param>
public
void
DecryptFile(
string
filePath,
string
outPath)
{
bool
isExist
=
File.Exists(filePath);
if
(isExist)
//
如果存在
{
byte
[] ivb
=
Encoding.ASCII.GetBytes(
this
.iv);
byte
[] keyb
=
Encoding.ASCII.GetBytes(
this
.EncryptKey);
FileInfo file
=
new
FileInfo(filePath);
byte
[] deCrypted
=
new
byte
[file.Length];
//
得到要解密文件的字节流
FileStream fin
=
new
FileStream(filePath,FileMode.Open,FileAccess.Read);
//
解密文件
try
{
ICryptoTransform decryptor
=
des.CreateDecryptor(keyb,ivb);
CryptoStream csDecrypt
=
new
CryptoStream(fin,decryptor,CryptoStreamMode.Read);
csDecrypt.Read(deCrypted,
0
,deCrypted.Length);
}
catch
(Exception err)
{
throw
new
ApplicationException(err.Message);
}
finally
{
try
{
fin.Close();
}
catch
{;}
}
FileStream fout
=
new
FileStream(outPath,FileMode.Create,FileAccess.Write);
fout.Write(deCrypted,
0
,deCrypted.Length);
fout.Close();
}
else
{
throw
new
FileNotFoundException(
"
指定的解密文件没有找到
"
);
}
}
/**/
///
<summary>
///
解密文件的重载版本,如果没有给出解密后文件的输出路径,
///
则解密后的文件将覆盖先前的文件
///
</summary>
///
<param name="filePath"></param>
public
void
DecryptFile(
string
filePath)
{
this
.DecryptFile(filePath,filePath);
}
#endregion
}
/**/
///
<summary>
///
MD5加密类,注意经MD5加密过的信息是不能转换回原始数据的
///
,请不要在用户敏感的信息中使用此加密技术,比如用户的密码,
///
请尽量使用对称加密
///
</summary>
public
class
MD5Encrypt
{
private
MD5 md5;
public
MD5Encrypt()
{
md5
=
new
MD5CryptoServiceProvider();
}
/**/
///
<summary>
///
从字符串中获取散列值
///
</summary>
///
<param name="str">
要计算散列值的字符串
</param>
///
<returns></returns>
public
string
GetMD5FromString(
string
str)
{
byte
[] toCompute
=
Encoding.Unicode.GetBytes(str);
byte
[] hashed
=
md5.ComputeHash(toCompute,
0
,toCompute.Length);
return
Encoding.ASCII.GetString(hashed);
}
/**/
///
<summary>
///
根据文件来计算散列值
///
</summary>
///
<param name="filePath">
要计算散列值的文件路径
</param>
///
<returns></returns>
public
string
GetMD5FromFile(
string
filePath)
{
bool
isExist
=
File.Exists(filePath);
if
(isExist)
//
如果文件存在
{
FileStream stream
=
new
FileStream(filePath,FileMode.Open,FileAccess.Read);
StreamReader reader
=
new
StreamReader(stream,Encoding.Unicode);
string
str
=
reader.ReadToEnd();
byte
[] toHash
=
Encoding.Unicode.GetBytes(str);
byte
[] hashed
=
md5.ComputeHash(toHash,
0
,toHash.Length);
stream.Close();
return
Encoding.ASCII.GetString(hashed);
}
else
//
文件不存在
{
throw
new
FileNotFoundException(
"
指定的文件没有找到
"
);
}
}
}
/**/
///
<summary>
///
用于数字签名的hash类
///
</summary>
public
class
MACTripleDESEncrypt
{
private
MACTripleDES mact;
private
string
__key
=
"
ksn168ch
"
;
private
byte
[] __data
=
null
;
public
MACTripleDESEncrypt()
{
mact
=
new
MACTripleDES();
}
/**/
///
<summary>
///
获取或设置用于数字签名的密钥
///
</summary>
public
string
Key
{
get
{
return
this
.__key;}
set
{
int
keyLength
=
value.Length;
int
[] keyAllowLengths
=
new
int
[]
{
8
,
16
,
24
}
;
bool
isRight
=
false
;
foreach
(
int
i
in
keyAllowLengths)
{
if
(keyLength
==
keyAllowLengths[i])
{
isRight
=
true
;
break
;
}
}
if
(
!
isRight)
throw
new
ApplicationException(
"
用于数字签名的密钥长度必须是8,16,24值之一
"
);
else
this
.__key
=
value;
}
}
/**/
///
<summary>
///
获取或设置用于数字签名的用户数据
///
</summary>
public
byte
[] Data
{
get
{
return
this
.__data;}
set
{
this
.__data
=
value;}
}
/**/
///
<summary>
///
得到签名后的hash值
///
</summary>
///
<returns></returns>
public
string
GetHashValue()
{
if
(
this
.Data
==
null
)
throw
new
NotSetSpecialPropertyException(
"
没有设置要进行数字签名的用户
"
+
"
数据(property:Data)
"
);
byte
[] key
=
Encoding.ASCII.GetBytes(
this
.Key);
this
.mact.Key
=
key;
byte
[] hash_b
=
this
.mact.ComputeHash(
this
.mact.ComputeHash(
this
.Data));
return
Encoding.ASCII.GetString(hash_b);
}
}
}
原文:
.net加密技术的应用(加密类代码参考)
查看全文
相关阅读:
centos 无线网卡安装,网卡rtl8188ee
centos mysqldb 安装
centos 安装gcc时,出错:Found 10 pre-existing rpmdb problem(s), 'yum check' output follows:
peewee 字段属性help_text的支持问题
mysql查看字段注释(帮助信息)指令
centos mysql 大量数据导入时1153 错误:1153
php在centos下的脚本没有解析的问题
[转]mysql分布式方案-分库拆表
[转]Mysql海量数据存储和解决方案之一—分布式DB方案
mysql 数据库字符集的指定
原文地址:https://www.cnblogs.com/pw/p/465956.html
最新文章
同步类容器和并发类容器概念
单例&多线程
ThreaLocal
queue模拟
多线程通信(wait和notify)
volatile关键字
项目管理深入理解01--人力资源管理
项目管理快速入门03--其他知识领域
SQL优化快速入门
项目管理快速入门02--“多快好省”
热门文章
项目管理快速入门01--概论
AngularJS快速入门
数据结构-字符串
Html与CSS快速入门04-进阶应用
Html与CSS快速入门03-CSS基础应用
Html与CSS快速入门02-HTML基础应用
[mysql] Some non-transactional changed tables couldn't be rolled back
ssh免密码登入
sublime text 个性设置
lenovo c340 centos 改键【尚无解】
Copyright © 2011-2022 走看看