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加密技术的应用(加密类代码参考)
查看全文
相关阅读:
基于MATLAB求解矩阵的正交补矩阵
MySQL的安装与配置
删除ubuntu后修复win7系统的引导
VS2010中快捷添加命名空间
java学习之函数
java学习之break 和 continue
For循环复杂练习
For循环练习之99乘法表和转义字符
java学习之语句结构
java学习之运算符
原文地址:https://www.cnblogs.com/pw/p/465956.html
最新文章
Spring boot 的自动配置
Starter pom
Spring boot 全局配置文件application.properties
spring boot session error
读取外部的资源配置文件
Spring 的java 配置方式
idea的pom.xml中提示dependency‘’not found
js 弹出 隐藏层和cookie
字典排序 不要写错顺序
Unity3D 回合制 网上源码 目前还在研究构思
热门文章
字符串长度截取换行/n
修改屏幕宽度
倒叙筛除list
UI线程
设置当前进程的级别方式
iOS 面试大全从简单到复杂(简单篇)
MathType 6.9 介绍安装
Java与MySQL的连接
如何解决mathpage.dll或MathType.dll文件找不到问题
宗教楹联
Copyright © 2011-2022 走看看