using System;
using System.Security;
using System.Security.Cryptography;
using System.IO;
using System.Text;
namespace MySecurity
{
public class MySecurity
{
public MySecurity()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private string key="1234567890"; //默认密钥
private byte[] sKey;
private byte[] sIV;
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="inputStr">输入字符串</param>
/// <param name="keyStr">密码,可以为“”</param>
/// <returns>输出加密后字符串</returns>
static public string SEncryptString(string inputStr,string keyStr)
{
MySecurity ws=new MySecurity();
return ws.EncryptString(inputStr,keyStr);
}
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="inputStr">输入字符串</param>
/// <param name="keyStr">密码,可以为“”</param>
/// <returns>输出加密后字符串</returns>
public string EncryptString(string inputStr,string keyStr)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for(int i=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
cs.Close();
ms.Close();
return ret.ToString();
}
/// <summary>
/// 加密文件
/// </summary>
/// <param name="filePath">输入文件路径</param>
/// <param name="savePath">加密后输出文件路径</param>
/// <param name="keyStr">密码,可以为“”</param>
/// <returns></returns>
public bool EncryptFile(string filePath,string savePath,string keyStr)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
FileStream fs=File.OpenRead(filePath);
byte[] inputByteArray =new byte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for(int i=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(byte b in ms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
return true;
}
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="inputStr">要解密的字符串</param>
/// <param name="keyStr">密钥</param>
/// <returns>解密后的结果</returns>
public string DecryptString(string inputStr,string keyStr)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
byte[] inputByteArray = new byte[inputStr.Length / 2];
for(int x = 0; x < inputStr.Length / 2; x++)
{
int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for(int i=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
/// <summary>
/// 解密文件
/// </summary>
/// <param name="filePath">输入文件路径</param>
/// <param name="savePath">解密后输出文件路径</param>
/// <param name="keyStr">密码,可以为“”</param>
/// <returns></returns>
public bool DecryptFile(string filePath,string savePath,string keyStr)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
FileStream fs=File.OpenRead(filePath);
byte[] inputByteArray =new byte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for(int i=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(byte b in ms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
return true;
}
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="inputStr">要解密的字符串</param>
/// <param name="keyStr">密钥</param>
/// <returns>解密后的结果</returns>
static public string SDecryptString(string inputStr,string keyStr)
{
MySecurity ws=new MySecurity();
return ws.DecryptString(inputStr,keyStr);
}
}
}
分享到:
相关推荐
在**字符串和文件加密**中,AES的优势在于它能处理任意长度的数据,无论字符串还是文件,只要将其转化为字节流,都可以进行加密。对于字符串,需要先将其编码为字节,如UTF-8编码,然后进行AES加密。文件加密则通常...
根据给定的文件信息,我们可以深入探讨C#中字符和文件加密的相关知识点,特别是通过一个名为"MySecurity"的类实现的加密方法。 ### C#字符加密 #### SEncryptString 方法 `SEncryptString` 方法是静态的,用于加密...
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
C#是一种广泛使用的编程语言,它提供了丰富的库和功能来实现数据加密。本文将深入探讨如何使用C#进行字符串加密,并将其保存到文件中,以此来保护您的数据不被未经授权的访问。 首先,我们需要了解基本的加密概念。...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为固定长度的输出,通常是128位,通常用32位十六进制表示,也就是32个字符。在Java中,我们经常使用MD5进行数据的加密,例如...
国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式
128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一个字符串 ...
AES(Advanced Encryption Standard)是最常用的一种对称加密算法,它提供了128位、192位和256位的密钥长度,其中256位的密钥安全性最高。AES的工作模式有ECB(电子密码本)、CBC(链式模式)、CFB(密文反馈模式)...
MD5加密 32位加密字符串 MD5加密 32位加密字符串 MD5加密 32位加密字符串
AES加密算法有三个主要的变种:AES-128、AES-192和AES-256,分别使用128位、192位和256位的密钥,其中AES-128已经足够安全,但对于高度敏感的数据,AES-256提供了更高的安全性。 在描述中提到的问题,即“网上很多...
`DESUtil.java`文件很可能包含一个名为`DESUtil`的类,该类提供了静态方法来进行DES加密和解密操作。类中可能会有如下的方法签名: ```java public static byte[] encrypt(String plainText, byte[] key) throws ...
在IT领域,数据安全至关重要,而3DES(Triple DES,三重数据加密标准)是一种广泛应用于数据加密的技术,尤其在对敏感信息进行保护时。3DES是DES(Data Encryption Standard,数据加密标准)的加强版,它通过三次...
字符串和文件的加密解密技术就是为了保护这些信息不被未经授权的人员访问。本文将深入探讨标题和描述中提及的“字符串(文件)加密解密工具”,并介绍相关的加密解密方法以及其在实际应用中的重要性。 首先,我们要...
它可能会使用`System.Configuration`命名空间的类,如`ConfigurationManager`来读取和写入配置,以及`System.Security.Cryptography`命名空间的类来执行加密操作。 6. **Web.config加密**: 对于Web应用,`Web....
在MFC中,我们可以利用各种加密算法来处理`CString`对象,这是MFC中用于表示和操作字符串的类。 一种常见的加密算法是AES(Advanced Encryption Standard),它是一种对称加密算法,速度快,安全性高。在MFC中,...
### 文件或字符加密(DES) #### 概述 在信息安全领域中,数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称密钥算法,用于保护电子数据的安全性。该算法最初由IBM公司开发,并于1977年被...
AES的核心是Rijndael算法,支持128、192和256位的密钥长度,以及128位的数据块大小。其工作流程包括多个轮的混淆和扩散过程,确保了即使知道明文和密文,也很难推断出密钥。 BlowFish算法是由Bruce Schneier设计的...
带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) /// /// 加密字符串 /// /// name="str">要加密的字符串 /// 加密后的...
6位二进制可以表示0-63的十进制数,对应Base64字符集中的一个字符。Base64字符集包括大小写字母(A-Z, a-z)、数字(0-9)以及"+"和"/",最后用"="作为填充字符,用于保证编码结果的长度是4的倍数。 加密过程通常是...
1. **MD5加密**:MD5产生一个128位的散列值,通常以32个十六进制字符表示。在JavaScript中,我们可以通过引入`md5.js`这个库来实现MD5加密。例如: ```javascript var md5 = require('md5'); var password = 'your...