社区
C#
帖子详情
!Mark! 100分求C#加解密字符串的方法(速度快为主)
bzhi268
2006-10-26 11:51:19
如题!!!
...全文
301
10
打赏
收藏
!Mark! 100分求C#加解密字符串的方法(速度快为主)
如题!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
viena
2006-10-26
打赏
举报
回复
就是初始化字典比较费时,可以事先定义好~
viena
2006-10-26
打赏
举报
回复
自定义加密最快,用自定义字典(字符串数组,字符编码为索引)查表转换即可
wings0201
2006-10-26
打赏
举报
回复
用 triple des 就不错
CH_MARS
2006-10-26
打赏
举报
回复
/// <summary>
/// 使用DES解密
/// </summary>
/// <param name="encryptedValue">待解密的字符串</param>
/// <param name="key">密钥(最大长度8)</param>
/// <returns>解密后的字符串</returns>
public string DESDecrypt(string encryptedValue,string key)
{
return DESDecrypt(encryptedValue,key,key);
}
/// <summary>
/// 将二进制数组转为字符串
/// </summary>
/// <param name="Byte">二进制数组</param>
/// <returns></returns>
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;
}
/// <summary>
/// 返回字符串的二进制数组
/// </summary>
/// <param name="strKey">字符串</param>
/// <returns></returns>
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;
}
}
}
程序中这样调用:
public static readonly string ConnectionStringLocalTransaction =new HashEncrypt(true,false).DESDecrypt( ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString,"web","web");
CH_MARS
2006-10-26
打赏
举报
回复
/// <summary>
/// 使用DES加密
/// </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());
}
/// <summary>
/// 使用DES加密
/// </summary>
/// <param name="originalValue">待加密的字符串</param>
/// <param name="key">密钥(最大长度8)</param>
/// <returns>加密后的字符串</returns>
public string DESEncrypt(string originalValue,string key)
{
return DESEncrypt(originalValue,key,key);
}
aafshzj
2006-10-26
打赏
举报
回复
常用的DES/MD5/RAS都挺快的啊。你要快到什么程度?够用就好。
zhangzengping
2006-10-26
打赏
举报
回复
和你的名字 异或,
idda
2006-10-26
打赏
举报
回复
不对称加密不适合用来加密大量数据, 但是小量数据还是不对称加密好
idda
2006-10-26
打赏
举报
回复
对称加密速度比不对称加密要快
/// <summary>
/// 获得密钥
/// </summary>
/// <returns>密钥</returns>
private byte[] GetLegalKey()
{
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV</returns>
private byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 加密方法
/// </summary>
/// <param name="Source">待加密的串</param>
/// <returns>经过加密的串</returns>
public string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);
}
/// <summary>
/// 解密方法
/// </summary>
/// <param name="Source">待解密的串</param>
/// <returns>经过解密的串</returns>
public string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}
}
}
江海汇
2006-10-26
打赏
举报
回复
mark
浅谈
c#
和lua的gc
本文深入解析
C#
和Lua语言的垃圾回收原理及过程,对比标记清除、复制算法和分代收集等策略,探讨非托管资源管理,以及Unity中
C#
的GC优化和Lua的三色标记清除算法。
C#
自动获取指定文本文件的编码格式Encoding以及BOM (Byte Order
Mark
字节顺序标记)
本文介绍了如何使用
C#
来检测文本文件的编码格式,包括通过字节顺序标记(BOM)识别UTF-8、UTF-16和UTF-32等编码,并提供了不依赖BOM的UTF-8编码判断
方法
。示例代码详细展示了如何读取文件并进行编码判断。
开始研究web,
mark
一下
本文分享了作者在决定开发WebGL引擎后的初步计划与调研,选择了Babylon.js为核心,搭配TypeScript与
C#
进行深入开发。Babylon.js以其全面的功能和可控性脱颖而出,而TypeScript则提供可靠的大型代码编写支持。
C#
字典类 Dictionary 基本用法
Mark
本文详细介绍了
C#
中Dictionary类的基本概念、使用
方法
及其属性和
方法
。包括如何定义、添加、修改、删除元素,以及如何遍历Dictionary中的键和值。
C#
学习记录——入门到进阶
本文系统梳理
C#
从基础语法到高级特性的完整知识体系,涵盖数据类型(有/无符号整型、浮点型、char、bool)、输入输出、类型转换、分支与循环语句、数组与
字符串
操作;深入讲解面向对象核心机制,包括类与对象、构造/析构函数、封装(属性get/set)、继承(里氏替换、base/this调用)、多态(virtual/override)、抽象类、接口、密封类;并覆盖泛型集合(List/Dictionary等)、委托(Action/Func)、事件、Lambda表达式、异常处理、调试技巧、ref/out参数、可变参数、枚举、结构体及反射基础(Type)。内容聚焦
C#
语言本质,适合作为系统性学习参考。
C#
111,132
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章