`
water84222
  • 浏览: 372870 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

字符和文件加密类,128位加密

阅读更多

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实现字符串和文件加密

    在**字符串和文件加密**中,AES的优势在于它能处理任意长度的数据,无论字符串还是文件,只要将其转化为字节流,都可以进行加密。对于字符串,需要先将其编码为字节,如UTF-8编码,然后进行AES加密。文件加密则通常...

    C#字符和文件加密类

    根据给定的文件信息,我们可以深入探讨C#中字符和文件加密的相关知识点,特别是通过一个名为"MySecurity"的类实现的加密方法。 ### C#字符加密 #### SEncryptString 方法 `SEncryptString` 方法是静态的,用于加密...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    C# 数据加密 字符串加密并保存文件

    C#是一种广泛使用的编程语言,它提供了丰富的库和功能来实现数据加密。本文将深入探讨如何使用C#进行字符串加密,并将其保存到文件中,以此来保护您的数据不被未经授权的访问。 首先,我们需要了解基本的加密概念。...

    随机生成36位MD5加密字符

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为固定长度的输出,通常是128位,通常用32位十六进制表示,也就是32个字符。在Java中,我们经常使用MD5进行数据的加密,例如...

    国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式

    国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式

    C#加密解密DeEncryptHelper.zip

    128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一个字符串 ...

    AES加密任意长度的字符串和任意大小的文件

    AES加密算法有三个主要的变种:AES-128、AES-192和AES-256,分别使用128位、192位和256位的密钥,其中AES-128已经足够安全,但对于高度敏感的数据,AES-256提供了更高的安全性。 在描述中提到的问题,即“网上很多...

    文件加密算法,主要用来加密文本文件,对字符串进行加密

    AES(Advanced Encryption Standard)是最常用的一种对称加密算法,它提供了128位、192位和256位的密钥长度,其中256位的密钥安全性最高。AES的工作模式有ECB(电子密码本)、CBC(链式模式)、CFB(密文反馈模式)...

    MD5加密 32位加密字符串

    MD5加密 32位加密字符串 MD5加密 32位加密字符串 MD5加密 32位加密字符串

    3des加密字符串文件加密

    在IT领域,数据安全至关重要,而3DES(Triple DES,三重数据加密标准)是一种广泛应用于数据加密的技术,尤其在对敏感信息进行保护时。3DES是DES(Data Encryption Standard,数据加密标准)的加强版,它通过三次...

    字符串(文件)加密解密工具,操作方便,功能强大。

    字符串和文件的加密解密技术就是为了保护这些信息不被未经授权的人员访问。本文将深入探讨标题和描述中提及的“字符串(文件)加密解密工具”,并介绍相关的加密解密方法以及其在实际应用中的重要性。 首先,我们要...

    一个.net配置文件加密的源代码

    它可能会使用`System.Configuration`命名空间的类,如`ConfigurationManager`来读取和写入配置,以及`System.Security.Cryptography`命名空间的类来执行加密操作。 6. **Web.config加密**: 对于Web应用,`Web....

    文件或字符加密(DES)

    ### 文件或字符加密(DES) #### 概述 在信息安全领域中,数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称密钥算法,用于保护电子数据的安全性。该算法最初由IBM公司开发,并于1977年被...

    字符串加密算法

    AES的核心是Rijndael算法,支持128、192和256位的密钥长度,以及128位的数据块大小。其工作流程包括多个轮的混淆和扩散过程,确保了即使知道明文和密文,也很难推断出密钥。 BlowFish算法是由Bruce Schneier设计的...

    C#加密解密(自定义加密字符)

    带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) ///   /// 加密字符串 ///   ///  name="str"&gt;要加密的字符串  /// 加密后的...

    文件字符串的加密和解密

    6位二进制可以表示0-63的十进制数,对应Base64字符集中的一个字符。Base64字符集包括大小写字母(A-Z, a-z)、数字(0-9)以及"+"和"/",最后用"="作为填充字符,用于保证编码结果的长度是4的倍数。 加密过程通常是...

    jQuery 实现字符串加密处理

    1. **MD5加密**:MD5产生一个128位的散列值,通常以32个十六进制字符表示。在JavaScript中,我们可以通过引入`md5.js`这个库来实现MD5加密。例如: ```javascript var md5 = require('md5'); var password = 'your...

    vb Rijndael-aes 字符和文件加密

    对于字符加密,可以将字符转换为字节数组,然后用同样的方式处理。解密过程类似,但使用`CreateDecryptor`方法,并且加密流改为读取模式。 标签"vb aes 加密"进一步强调了我们关注的是VB中的AES加密实现。在实际...

    php字符串加密解密的类

    base64编码的原理是将每3个字节(24位)的数据分为4个6位组,并为每个6位组分配一个字符,范围在'AA'到'ZZ'之间,以及'/'和'='。'='字符用于填充不足6位的数据。解码过程则相反,将这些字符转换回原始的二进制数据。...

Global site tag (gtag.js) - Google Analytics