zoukankan
html css js c++ java
c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
using
System;
using
System.IO;
using
System.Data;
using
System.Text;
using
System.Diagnostics;
using
System.Security;
using
System.Security.Cryptography;
/**/
/*
* .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法。本类实现一些常用机密算法,供参考。其中MD5算法返回Int的ToString字串。返回数字字母型结果的算法参见之前Blog文章
*/
namespace
档案数字化加工
{
/**/
///
<summary>
///
类名:HashEncrypt
///
作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。
///
属性:[无]
///
构造函数额参数:
///
IsReturnNum:是否返回为加密后字符的Byte代码
///
IsCaseSensitive:是否区分大小写。
///
方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。
///
</summary>
public
class
HashEncrypt
{
//
private string strIN;
private
bool
isReturnNum;
private
bool
isCaseSensitive;
/**/
///
<summary>
///
类初始化,此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。
///
</summary>
///
<param name="IsCaseSensitive">
是否区分大小写
</param>
///
<param name="IsReturnNum">
是否返回为加密后字符的Byte代码
</param>
public
HashEncrypt(
bool
IsCaseSensitive,
bool
IsReturnNum)
{
this
.isReturnNum
=
IsReturnNum;
this
.isCaseSensitive
=
IsCaseSensitive;
}
private
string
getstrIN(
string
strIN)
{
//
string strIN = strIN;
if
(strIN.Length
==
0
)
{
strIN
=
"
~NULL~
"
;
}
if
(isCaseSensitive
==
false
)
{
strIN
=
strIN.ToUpper();
}
return
strIN;
}
public
string
MD5Encrypt(
string
strIN)
{
//
string strIN = getstrIN(strIN);
byte
[] tmpByte;
MD5 md5
=
new
MD5CryptoServiceProvider();
tmpByte
=
md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
md5.Clear();
return
GetStringValue(tmpByte);
}
public
string
SHA1Encrypt(
string
strIN)
{
//
string strIN = getstrIN(strIN);
byte
[] tmpByte;
SHA1 sha1
=
new
SHA1CryptoServiceProvider();
tmpByte
=
sha1.ComputeHash(GetKeyByteArray(strIN));
sha1.Clear();
return
GetStringValue(tmpByte);
}
public
string
SHA256Encrypt(
string
strIN)
{
//
string strIN = getstrIN(strIN);
byte
[] tmpByte;
SHA256 sha256
=
new
SHA256Managed();
tmpByte
=
sha256.ComputeHash(GetKeyByteArray(strIN));
sha256.Clear();
return
GetStringValue(tmpByte);
}
public
string
SHA512Encrypt(
string
strIN)
{
//
string strIN = getstrIN(strIN);
byte
[] tmpByte;
SHA512 sha512
=
new
SHA512Managed();
tmpByte
=
sha512.ComputeHash(GetKeyByteArray(strIN));
sha512.Clear();
return
GetStringValue(tmpByte);
}
/**/
///
<summary>
///
使用DES加密(Added by niehl 2005-4-6)
///
</summary>
///
<param name="originalValue">
待加密的字符串
</param>
///
<param name="key">
密钥(最大长度8)
</param>
///
<param name="IV">
初始化向量(最大长度8)
</param>
///
<returns>
加密后的字符串
</returns>
public
string
DESEncrypt(
string
originalValue,
string
key,
string
IV)
{
//
将key和IV处理成8个字符
key
+=
"
12345678
"
;
IV
+=
"
12345678
"
;
key
=
key.Substring(
0
,
8
);
IV
=
IV.Substring(
0
,
8
);
SymmetricAlgorithm sa;
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
sa
=
new
DESCryptoServiceProvider();
sa.Key
=
Encoding.UTF8.GetBytes(key);
sa.IV
=
Encoding.UTF8.GetBytes(IV);
ct
=
sa.CreateEncryptor();
byt
=
Encoding.UTF8.GetBytes(originalValue);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Convert.ToBase64String(ms.ToArray());
}
public
string
DESEncrypt(
string
originalValue,
string
key)
{
return
DESEncrypt(originalValue, key, key);
}
/**/
///
<summary>
///
使用DES解密(Added by niehl 2005-4-6)
///
</summary>
///
<param name="encryptedValue">
待解密的字符串
</param>
///
<param name="key">
密钥(最大长度8)
</param>
///
<param name="IV">
m初始化向量(最大长度8)
</param>
///
<returns>
解密后的字符串
</returns>
public
string
DESDecrypt(
string
encryptedValue,
string
key,
string
IV)
{
//
将key和IV处理成8个字符
key
+=
"
12345678
"
;
IV
+=
"
12345678
"
;
key
=
key.Substring(
0
,
8
);
IV
=
IV.Substring(
0
,
8
);
SymmetricAlgorithm sa;
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
sa
=
new
DESCryptoServiceProvider();
sa.Key
=
Encoding.UTF8.GetBytes(key);
sa.IV
=
Encoding.UTF8.GetBytes(IV);
ct
=
sa.CreateDecryptor();
byt
=
Convert.FromBase64String(encryptedValue);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Encoding.UTF8.GetString(ms.ToArray());
}
public
string
DESDecrypt(
string
encryptedValue,
string
key)
{
return
DESDecrypt(encryptedValue, key, key);
}
private
string
GetStringValue(
byte
[] Byte)
{
string
tmpString
=
""
;
if
(
this
.isReturnNum
==
false
)
{
ASCIIEncoding Asc
=
new
ASCIIEncoding();
tmpString
=
Asc.GetString(Byte);
}
else
{
int
iCounter;
for
(iCounter
=
0
; iCounter
<
Byte.Length; iCounter
++
)
{
tmpString
=
tmpString
+
Byte[iCounter].ToString();
}
}
return
tmpString;
}
private
byte
[] GetKeyByteArray(
string
strKey)
{
ASCIIEncoding Asc
=
new
ASCIIEncoding();
int
tmpStrLen
=
strKey.Length;
byte
[] tmpByte
=
new
byte
[tmpStrLen
-
1
];
tmpByte
=
Asc.GetBytes(strKey);
return
tmpByte;
}
}
}
查看全文
相关阅读:
张量自动求导和计算图
34 深入浅出 x86 中断机制(下)
33 深入浅出 x86 中断机制(上)
使用STM32 PWM控制LCD背光
32 获取物理内存容量 下
ucGUI内存管理相关
STM32 SPI双机通信参考
IAR_UCOSII_UCOSIII
每日总结
每日总结
原文地址:https://www.cnblogs.com/dreign/p/751089.html
最新文章
layer的confirm防止多次提交
js---数组外面包了引号,怎么去掉外面的引号,变成原来的数组
2021.5.13 第一阶段验收
2021.5.12 Android缓冲加载页面2
2021.5.11 Android软件缓冲加载页面
2021.5.10 Android页面下拉刷新
2021.5.9 连接服务器2
2021.5.8 Android连接服务器数据库
2021.5.7 软件工程质量
2021.5.6 程序员修炼之道:从小工到专家阅读笔记01
热门文章
2021.5.5 团队冲刺10
2021.5.4 团队冲刺9
指数加权移动平均
基于动量(momentum)的梯度下降法
Pytorch 之损失函数
Pytorch 之优化器
Pytorch 之激活函数
Pytorch 神经网络模块之 Linear Layers
向量对矩阵求导
标量对矩阵求导
Copyright © 2011-2022 走看看