c# 加密和解密代码

作者&投稿:郸拜 (若有异议请与网页底部的电邮联系)
C#如何对Excel文件进行加密和解密,有没有代码可以告诉我的?~

用这个组件-Spire.XLS,亲测有效,支持多种加密/保护方式,实现方案:
C# Excel 文档保护
加密代码:
//初始化一个Workbook实例并加载文档Workbook workbook = new Workbook();workbook.LoadFromFile("Test.xlsx");////使用密码保护工作薄//workbook.Protect("123");//密码保护工作薄,并保护工作薄结构workbook.Protect("123",true,true);workbook.SaveToFile("ProtectExcel.xlsx", ExcelVersion.Version2013);解密代码:
//加载Excel文档Workbook workbook = new Workbook();workbook.LoadFromFile("Sample.xlsx");//获取第一个工作表Worksheet sheet = workbook.Worksheets[0];//输入密码取消保护工作表sheet.Unprotect("123");//保存文档workbook.SaveToFile("Result.xlsx", ExcelVersion.Version2013);

c# dll 加密最快的方法使用加壳工具Virbox Protector,直接加密,Virbox Protectorke可以对dll进行性能分析,分析每个函数的调用次数,对每个函数选择保护方式如:混淆/虚拟化/碎片化/代码加密等;每种加密方法的特点是什么呢?
代码加密(X86):
针对X86汇编代码:一种代码自修改技术(SMC)保护代码。把当前代码加密存储为密文,存储起来,当程序运行到被保护函数时候自动解密并且执行,执行之后再擦除代码,运行到哪里才解密哪里的代码,黑客无法获得原始机器指令和内存完整性的代码,由于是纯内存操作所以运行速度快, 性价高的保护手段,建议全加
代码加密(IL)
针对dotNet程序,保护IL代码:一种动态运行方法解密被保护代码。把当前代码加密存储为密文,存储起来,当程序运行到被保护函数时候自动解密并且执行,执行之后再擦除代码,执行之后再擦除代码,运行到哪里才解密哪里的代码,黑客无法获得原始的中间语言的指令和内存完整性的代码,由于是纯内存操作所以运行速度快, 性价高的保护手段,建议全加
压缩
类似zip等压缩软件把代码和数据段压缩,由于带有动态密码,没有任何工具可以自动脱壳,是防止反编译和反汇编关键手段。
代码混淆(IL):
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
a)重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。
b) 打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
c) 添加花指令,通过特殊构造的指令来使得反汇编器出错,进而干扰反编译工作的进行。
代码混淆器也会带来一些问题。主要的问题包括:· 被混淆的代码难于理解,因此调试除错也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。· 对于支持反射的语言,代码混淆有可能与反射发生冲突。· 代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。
代码混淆的特点是安全度低、不会影响效率。
代码虚拟化:
针对X86代码: 是指将机器代码翻译为机器和人都无法识别的一串伪代码字节流;在具体执行时再对这些伪代码进行一一翻译解释,逐步还原为原始代码并执行。 这段用于翻译伪代码并负责具体执行的子程序就叫作虚拟机VM(好似一个抽象的CPU)。它以一个函数的形式存在,函数的参数就是字节码的内存地址。 由于虚拟机代码和虚拟机CPU的实现可以做到每次都是随机设计和随机执行 并且代码每次可以随机变化,包括一些逻辑上的等价变化可以参考硬件N个与非门NOT-AND实现各种逻辑门,算法和访问内存形式的变化,包括数学上的非等价变化,代码体积几乎可以膨胀达到100到10000倍,造成机器无法做算法还原到原有逻辑。
代码虚拟化的特点是:安全度中、不会影响效率。
代码碎片化:
深思自主知识产权的最新技术:基于 LLVM 和 ARM 虚拟机技术,自动抽取海量代码移入 SS 内核态模块,极大的降低了使用门槛, 不再需要手动移植算法,可移植的算法从有限的几个增长到几乎无限多,支持的语言也不再限于 C, 这是加密技术的一次综合应用,效果上类似于将软件打散执行,让破解者无从下手。
安全度高、建议关键函数或调用加密锁方法;使用太多会影响效率

加密有很多中,常用的有MD5

C# md5加密(上)
string a; //加密前数据
string b; //加密后数据
b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5")
using System;
using System.Security.Cryptography;
方法2
public static string GetMD5(string myString)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);
byte[] targetData = md5.ComputeHash(fromData);
string byte2String = null;
for (int i=0; i<targetData.Length; i++)
{
byte2String += targetData[i].ToString("x");
}
return byte2String;
}
using System.Security.Cryptography;

/// <summary>
/// 给一个字符串进行MD5加密
/// </summary>
/// <param name="strText">待加密字符串</param>
/// <returns>加密后的字符串</returns>
public static string MD5Encrypt(string strText)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strText));
return System.Text.Encoding.Default.GetString(result);
}

C# MD5加密
using System.Security.Cryptography;

private void btnOK_Click(object sender, System.EventArgs e)
{
string strConn = "server=192.168.0.51;database=chengheng;User id=sa; password=123";
if(texName.Text.Trim()=="")
{
this.RegisterStartupScript("sf","<script language='javascript'>alert('用户名不能为空');document.all('texName').focus()</script>");
return;
}
else if(texPassword.Text.Trim()=="")
{
this.RegisterStartupScript("sfs","<script language='javascript'>alert('密码不能为空');document.all('texPassword').focus()</script>");
return;
}
else
{
//将获取的密码加密与数据库中加了密的密码相比较
byte[] by = md5.ComputeHash(utf.GetBytes(texPassword.Text.Trim()));
string resultPass = System.Text.UTF8Encoding.Unicode.GetString(by);
conn.ConnectionString=strConn;
SqlCommand comm = new SqlCommand();
string name = texName.Text.Trim().ToString();
comm.CommandText="select Ruser_pwd,Ruser_nm from Ruser where Accountno = @name";
comm.Parameters.Add("@name",SqlDbType.NVarChar,40);
comm.Parameters["@name"].Value=name;
try
{
conn.Open();
comm.Connection=conn;
SqlDataReader dr=comm.ExecuteReader();
if(dr.Read())
{
//用户存在,对密码进行检查
if(dr.GetValue(0).Equals(resultPass))
{
string user_name=dr.GetValue(1).ToString();
string user_Accountno=texName.Text.Trim();
Session["logon_name"]=user_name;
Session["logon_Accountno"]=user_Accountno;
//登录成功,进行页面导向
}
else
{
this.RegisterStartupScript("wp","<script language='javascript'>alert('密码错误,请检查。')</script>");
}

}
else
{
this.RegisterStartupScript("nu","<script language=javascript>alert('用户名不存在,请检查。')</script>");
}
}
catch(Exception exec)
{
this.RegisterStartupScript("wc","<script language=javascript>alert('网络连接有异,请稍后重试。')</script>");
}
finally
{
conn.Close();
}
}
}

有一个加密算法,采用密钥加密的。
using System.Security.Cryptography;
//加密
public static String JiaMi(String str)
{
String encryptKey = "Oyea";
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
byte[] key = Encoding.Unicode.GetBytes(encryptKey);
byte[] data = Encoding.Unicode.GetBytes(str);
System.IO.MemoryStream MStream = new System.IO.MemoryStream();
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length);
CStream.FlushFinalBlock();
return Convert.ToBase64String(MStream.ToArray());
}
//解密
public static String JieMi(String str)
{
String encryptKey = "Oyea";
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
byte[] key = Encoding.Unicode.GetBytes(encryptKey);
byte[] data = Convert.FromBase64String(str);
System.IO.MemoryStream MStream = new System.IO.MemoryStream();
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateDecryptor(key,key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length);
CStream.FlushFinalBlock();
return Encoding.Unicode.GetString(MStream.ToArray());
}
"System.Security.Cryptography" 类库就是一个有关加密解密的,LZ不妨打开MSDN查查看?
我写的都是静态方法,请不要实例化对象再使用方法 :)。

大哥,我不是复制的,我今天回答了你的三个问题了,是同一个人!

MD5加密,但它是一个不可逆的过程,没有办法解密!

MD5加密是不可逆的 只能重设 不能读取 真要读取的话你可以去百度搜索网站 有个网站收录了4000多亿条MD5密码


金水区17183012296: 求一段C#简单的字符串加密与解密代码 -
唐饱普鲁: using System.Security.Cryptography;using System.Text;string get6(string 要加密的文字或者要解密的文字outXMLFilePath, string jia) { byte[] Keys ={ 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; if (jia.Equals("加密")) { byte[] rgbKey ={ 0x12,...

金水区17183012296: c#怎么实现密码加密解密 -
唐饱普鲁: 简单,到网上下载一个加密解密的类,调用就ok了,比如我下载的一个是common,里面的md5就是一个加密的方法 string UserPwd = DBUtility.Common.md5(this.txtOldPwd.Text.Trim(), 16); 登录时就调用解密的

金水区17183012296: 用C#在VS2005中写个RSA加密解密的程序 -
唐饱普鲁: 这里调用例程,从我的项目代码里抠出来的,肯定可用.类我mail给你//RSA密钥长度,32*32=1024bit#define VL 32// p, q 仅在加密程序中用 DWORD p[VL/2]; DWORD q[VL/2];// e, m 在加解密程序中都要 DWORD e = 0X00010001; DWORD m[...

金水区17183012296: 怎么用C#为一个网络系统做身份认证 以及 数据加密解密啊(求代码) 谢谢众大神 可行必给分!!! -
唐饱普鲁: public string GetMD5String(string str) { System.Security.Cryptography.MD5 md5 = new MD5CryptoServiceProvider(); byte[] data = System.Text.Encoding.Default.GetBytes(str); byte[] md5data = md5.ComputeHash(data); md5.Clear(); StringBuilder ...

金水区17183012296: 1.使用高级语言(C、C++、C#语言)实现一个加密/解密程序,调试并通过该程序.(1)算法描述(2)程序源代码(3)验证结果网络安全的课程设计 急啊! -
唐饱普鲁:[答案] 你们也太麻烦了,下面是我自己写的加密及解密函数,VC6下测试可用! 加密程序源码: #include void main() { int a[7],i,count,n,temp; for(i=0;i printf("*"); printf("\n此程序将把您输入的一个小于8位的数通过一个算法进行加密.\n"); printf("\n\n加密...

金水区17183012296: c#中,如何将含有字母和数字的字符串加密成一个全是字母的字符串,并解密 -
唐饱普鲁: public class StringEncrypt { ////// 使用缺省密钥字符串加密////// 明文/// 密文 public static string Encrypt(string original) { return Encrypt(original, "xyzABc*$!"); } ////// 使用缺省密钥解密////// 密文/// 明文 public static string Decrypt...

金水区17183012296: C#异或加密解密源码谁有啊 -
唐饱普鲁: 最简单的异或加密解密,特点是加密解密算法相同:下面的可以直接测试. private void button1_Click(object sender, EventArgs e) { byte key = 123; Text = encryptDecryptStr(textBox1.Text, key); } private string encryptDecryptStr(string p, byte key) ...

金水区17183012296: c#中如何完成一个字符加密解密程序(如A加密后为F) -
唐饱普鲁: 通常加密解密都是采用异或运算. 例如: char c = 'A'; c ^= (char)7; // 加密, 此时c的值是'F' c ^= (char)7; // 解密, 此时c的值是'A' 这个只是一个简单的例子, 密钥是7, 你可以进行多次异或运算来提高算法难度.我已经在另一个问题中回答了. http://zhidao.baidu.com/question/69200314.html

金水区17183012296: 如何用C#实现DES加密解密 -
唐饱普鲁: Solaris下的系统,有一个用C做的加密工具,调用Sunwcry的des(1)对文件进行加密,然后在java中对文件进行解密.java中用的是标准的DES/CBC/NoPadding算法,可是解密后发现开头有8byte的数据出错了,

金水区17183012296: 用c#实现Rsa加密和解密 -
唐饱普鲁: using System;using System.Security.Cryptography;using System.Text;public static void Main(String[] args){ var strPriKey 你的私钥的Base64格式字符串(不需...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网