关于文件加密技术的探讨

Uncommon 2006-09-25 10:08:53
主题:.NET下的文件加密技术
类型:技术趋势、解决方案、行业前景、核心算法等


我自己也不是很清楚
开一个帖子大家讨论一下

朋友如果关注就顶一下
...全文
1652 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujia_0421 2006-11-15
  • 打赏
  • 举报
回复
学习了...
卧_槽 2006-11-15
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B307010
xjjdanran 2006-09-26
  • 打赏
  • 举报
回复
学习
Uncommon 2006-09-26
  • 打赏
  • 举报
回复
to iflang(踩姑娘的小蘑菇)

谢谢
Uncommon 2006-09-26
  • 打赏
  • 举报
回复
to: littlechen(littlechen)

水印技术
===========================

说下去。。。。
sonyicn 2006-09-26
  • 打赏
  • 举报
回复
不错,了解到了一些加密算法
iflang 2006-09-26
  • 打赏
  • 举报
回复
代码体现思路
亮灯了 2006-09-26
  • 打赏
  • 举报
回复
学习中!
cnming 2006-09-26
  • 打赏
  • 举报
回复
借题提一下我原先想建立的思路


采用一个映像文件,然后可以虚拟出一个逻辑盘,类似虚拟光驱一样的,然后存入这个逻辑盘的文件都会经过加密运算,读取出来的也都会经过解密运算。当要打开这个逻辑盘的时候,必须输入一个密钥,输入的这个密钥并非去核对匹配,而是采用这个密钥进行解密运算,因此,密钥如果输入错误的话,是无法解密的。这个所输入的密钥可以借助外部硬件设备,例如EKey。

存入的文件所采用的加密算法可以有多种选择,对称的,非对称的.....


我感觉加解密不难,关键是虚拟设备的驱动问题。

Klaus19800331 2006-09-25
  • 打赏
  • 举报
回复
mark
wangwei155 2006-09-25
  • 打赏
  • 举报
回复
牛蘑菇
viena 2006-09-25
  • 打赏
  • 举报
回复
小蘑菇牛!
fds2003 2006-09-25
  • 打赏
  • 举报
回复
关注
aliketen 2006-09-25
  • 打赏
  • 举报
回复
关注
iflang 2006-09-25
  • 打赏
  • 举报
回复
以上发的是完整的 RC2加密
wl22817560 2006-09-25
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5045/5045049.xml?temp=.7106897
借点人气 找人帮帮忙
iflang 2006-09-25
  • 打赏
  • 举报
回复
}
catch(System.Exception)
{
MessageBox.Show("输入的字符串必须为长度为16的且属于ASCII字符集的字符串");
this.key = null;
}
}
}
}
iflang 2006-09-25
  • 打赏
  • 举报
回复
(续)
System.IO.FileStream tmpFileStream = new FileStream(filePath,
System.IO.FileMode.Open,
System.IO.FileAccess.Read,
System.IO.FileShare.None,1024,true);

System.Security.Cryptography.ICryptoTransform Decryptor = rc2CSP.CreateDecryptor(Key,IV);
System.IO.MemoryStream msDecrypt = new MemoryStream();
System.Security.Cryptography.CryptoStream csDecrypt = new CryptoStream(msDecrypt,
Decryptor,CryptoStreamMode.Write);
byte[] index = new byte[10261];

tmpFileStream.Read(index,0,10261);
int startIndex = 1024*(dataIndex-1)+21;
int count = index[dataIndex*2 - 1]*128 + index[dataIndex*2];
byte[] tmp = new byte[count];

Array.Copy(index,1024*(dataIndex-1)+21,tmp,0,count);
csDecrypt.Write(tmp,0,count);
csDecrypt.FlushFinalBlock();
decrypted = msDecrypt.ToArray();
r = textConverter.GetString(decrypted,0,decrypted.Length);
tmpFileStream.Close();
return r;
}
/// <summary>
/// 将一段文本加密后保存到一个文件
/// </summary>
/// <param name="toEncryptText">要加密的文本数据</param>
/// <param name="filePath">要保存的文件</param>
/// <param name="IV">初始化向量</param>
/// <param name="Key">加密密匙</param>
/// <returns>是否加密成功</returns>
public bool EncryptToFile(string toEncryptText,string filePath,byte[] IV,byte[] Key)
{
bool r = false;
byte[] encrypted;
System.IO.FileStream tmpFileStream = new FileStream(filePath,
System.IO.FileMode.OpenOrCreate,
System.IO.FileAccess.Write,
System.IO.FileShare.None,1024,true);

System.Security.Cryptography.ICryptoTransform Encryptor = rc2CSP.CreateEncryptor(Key,IV);
System.IO.MemoryStream msEncrypt = new MemoryStream();
System.Security.Cryptography.CryptoStream csEncrypt = new CryptoStream(msEncrypt,
Encryptor,CryptoStreamMode.Write);

byte[] tmp = textConverter.GetBytes(toEncryptText);
csEncrypt.Write(tmp,0,tmp.Length);
csEncrypt.FlushFinalBlock();
encrypted = msEncrypt.ToArray();
tmpFileStream.Write(encrypted,0,encrypted.Length);
tmpFileStream.Flush();
r = true;
tmpFileStream.Close();
return r;
}
/// <summary>
/// 将一个被加密的文件解密
/// </summary>
/// <param name="filePath">要解密的文件</param>
/// <param name="IV">初始化向量</param>
/// <param name="Key">解密密匙</param>
/// <returns>解密后的文本</returns>
public string DecryptFromFile(string filePath,byte[] IV,byte[] Key)
{
string r = "";
byte[] decrypted;
System.IO.FileStream tmpFileStream = new FileStream(filePath,
System.IO.FileMode.Open,
System.IO.FileAccess.Read,
System.IO.FileShare.None,1024,true);
System.Security.Cryptography.ICryptoTransform Decryptor = rc2CSP.CreateDecryptor(Key,IV);
System.IO.MemoryStream msDecrypt = new MemoryStream();
System.Security.Cryptography.CryptoStream csDecrypt = new CryptoStream(msDecrypt,
Decryptor,CryptoStreamMode.Write);

byte[] tmp = new byte[tmpFileStream.Length];
tmpFileStream.Read(tmp,0,tmp.Length);
csDecrypt.Write(tmp,0,tmp.Length);
csDecrypt.FlushFinalBlock();
decrypted = msDecrypt.ToArray();
r = textConverter.GetString(decrypted,0,decrypted.Length);
tmpFileStream.Close();
return r;
}
/// <summary>
/// 设置加密或解密的初始化向量
/// </summary>
/// <param name="s">长度等于8的ASCII字符集的字符串</param>
public void SetIV(string s)
{
if(s.Length != 8)
{
MessageBox.Show("输入的字符串必须为长度为8的且属于ASCII字符集的字符串");
this.iv =null;
return;
}
try
{
this.iv = this.asciiEncoding.GetBytes(s);
}
catch(System.Exception)
{
MessageBox.Show("输入的字符串必须为长度为8的且属于ASCII字符集的字符串");
this.iv = null;
}
}
/// <summary>
/// 设置加密或解密的密匙
/// </summary>
/// <param name="s">长度等于16的ASCII字符集的字符串</param>
public void SetKey(string s)
{
if(s.Length != 16)
{
MessageBox.Show("输入的字符串必须为长度为16的且属于ASCII字符集的字符串");
this.key = null;
return;
}
try
{
this.key = this.asciiEncoding.GetBytes(s);
RexZheng 2006-09-25
  • 打赏
  • 举报
回复
.net已经封装了很多加密算法了
RexZheng 2006-09-25
  • 打赏
  • 举报
回复
常见用于保证安全的加密或编码算法如下:

1、常用密钥算法

密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。

2、单向散列算法

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

3、其它数据算法

其它数据算法包括一些常用编码算法及其与明文(ASCII、Unicode 等)转换等,如 Base 64、Quoted Printable、EBCDIC 等。
加载更多回复(30)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧