c# winform 文件内容的加密与解密

  1. #region 加密方法   
  2. public bool EncryptFile(string filePath,string savePath,string keyStr)    
  3. {    
  4.     DESCryptoServiceProvider des = new DESCryptoServiceProvider();    
  5.     if(keyStr=="")    
  6.         keyStr=key;    
  7.     FileStream fs=File.OpenRead(filePath);    
  8.     byte[] inputByteArray =new byte[fs.Length];    
  9.     fs.Read(inputByteArray,0,(int)fs.Length);    
  10.     fs.Close();    
  11.     byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);    
  12.     SHA1 ha=new SHA1Managed();    
  13.     byte[] hb=ha.ComputeHash(keyByteArray);    
  14.     sKey=new byte[8];    
  15.     sIV=new byte[8];    
  16.     for(int i=0;i<8;i++)    
  17.         sKey[i]=hb[i];    
  18.     for(int i=8;i<16;i++)    
  19.         sIV[i-8]=hb[i];    
  20.     des.Key=sKey;    
  21.     des.IV=sIV;    
  22.     MemoryStream ms = new MemoryStream();    
  23.     CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);    
  24.     cs.Write(inputByteArray, 0, inputByteArray.Length);    
  25.     cs.FlushFinalBlock();    
  26.     fs=File.OpenWrite(savePath);    
  27.   
  28.     foreach(byte b in ms.ToArray())    
  29.     {    
  30.         fs.WriteByte(b);               
  31.     }                      
  32.     fs.Close();    
  33.     cs.Close();    
  34.     ms.Close();    
  35.     return true;    
  36. }  
  37. #endregion 

    • #region 解密方法   
    • 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;    
    • }   
    • #endregion
好的,以下是基于C# Winform的国密SM4加解密方法的示例代码: ``` using System.Security.Cryptography; // SM4加密 public static byte[] SM4Encrypt(byte[] plainData, byte[] key) { // 创建SM4加密对象 var sm4 = new SM4CryptoServiceProvider(); // 设置加密模式和填充模式 sm4.Mode = CipherMode.ECB; sm4.Padding = PaddingMode.Zeros; // 设置密钥 sm4.Key = key; // 创建加密器 var encryptor = sm4.CreateEncryptor(); // 加密数据 return encryptor.TransformFinalBlock(plainData, 0, plainData.Length); } // SM4解密 public static byte[] SM4Decrypt(byte[] cipherData, byte[] key) { // 创建SM4解密对象 var sm4 = new SM4CryptoServiceProvider(); // 设置加密模式和填充模式 sm4.Mode = CipherMode.ECB; sm4.Padding = PaddingMode.Zeros; // 设置密钥 sm4.Key = key; // 创建解密器 var decryptor = sm4.CreateDecryptor(); // 解密数据 return decryptor.TransformFinalBlock(cipherData, 0, cipherData.Length); } ``` 使用方法: ``` // 要加密的数据 byte[] plainData = Encoding.UTF8.GetBytes("Hello, world!"); // 加密密钥 byte[] key = new byte[16] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }; // 加密 byte[] cipherData = SM4Encrypt(plainData, key); // 解密 byte[] decryptedData = SM4Decrypt(cipherData, key); // 输出解密后的数据 Console.WriteLine(Encoding.UTF8.GetString(decryptedData)); ``` 请注意,以上示例代码仅供参考,您需要根据实际需求进行修改和调整。另外,由于SM4算法是国密算法,因此在实际开发中需要遵循相关法律法规的规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值