求一个加密,解密函数

liushiying 2003-10-22 02:18:34
求一个加密,解密函数
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixigongzhu 2003-10-30
  • 打赏
  • 举报
回复
每个加密算法加密之后的字节数是一定的,所以只需要将加密前的字节数定为加密后的长度就可以了。比如DES算法,如果Padding值为PaddingMode.Zeros,如果输入的长度8以内,输出便是8,也就是说,DES只要加密前的字节数以8为单元(8,16,24...),并且Padding的值为Zeros,输入跟输出的字节数就相同。
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
desc.Padding = PaddingMode.Zeros;
加密和解密都必须这样设置:
static byte[] Encrypt(byte[] data, byte[] key) {
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
desc.Padding = PaddingMode.Zeros;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,desc.CreateEncryptor(key, key),CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}

static byte[] Decrypt(byte[] data, byte[] key) {
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
desc.Padding = PaddingMode.Zeros;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}
seaneal 2003-10-24
  • 打赏
  • 举报
回复
up
xixigongzhu 2003-10-24
  • 打赏
  • 举报
回复
忘了是VB了:
Shared Function Encrypt(data() As Byte, key() As Byte) As Byte()
Dim desc As DESCryptoServiceProvider = new DESCryptoServiceProvider()
Dim ms As MemoryStream = new MemoryStream()
Dim cs As CryptoStream = new CryptoStream(ms, desc.CreateEncryptor(key, key), CryptoStreamMode.Write)
cs.Write(data, 0, data.Length)
cs.FlushFinalBlock()
Return ms.ToArray()
End Function

Shared Function Decrypt(data() As Byte, key() As Byte) As Byte()
Dim desc As DESCryptoServiceProvider = new DESCryptoServiceProvider()
Dim ms As MemoryStream = new MemoryStream()
Dim cs As CryptoStream = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write)
cs.Write(data, 0, data.Length)
cs.FlushFinalBlock()
Return ms.ToArray()
End Function
eileendl 2003-10-24
  • 打赏
  • 举报
回复
看看我的加密解密函数:
Imports System.Text
Imports System.Security.Cryptography
Imports System.IO
Public Class Encypt
'--加密函数--
'strEncrKey必须是8位或以上
Shared Function Encrypt(ByVal data As String, ByVal strEncrKey As String) As String
Try
Dim bytes() As Byte = Encoding.Unicode.GetBytes(Data)
Dim byKey() As Byte = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8))
Dim iv() As Byte = {1, 2, 3, 4, 5, 6, 7, 8}
Dim des As New DESCryptoServiceProvider()
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(Data)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(byKey, iv), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch
MsgBox(Err.Description)
Return ""
End Try
End Function

'--解密函数--
'strEncrKey必须是8位或以上
Shared Function Decrypt(ByVal data As String, ByVal strEncrKey As String) As String
Try
Dim bytes() As Byte = Encoding.Unicode.GetBytes(data)
Dim byKey() As Byte = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8))
Dim iv() As Byte = {1, 2, 3, 4, 5, 6, 7, 8}
Dim des As New DESCryptoServiceProvider()
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(data)
Dim ms As New MemoryStream()
inputByteArray = Convert.FromBase64String(data)
Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey, iv), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return System.Text.Encoding.UTF8.GetString(ms.ToArray())
Catch
MsgBox(Err.Description)
Return ""
End Try
End Function
End Class

加密解密的Key一定要一样。
调用:
加密:
Dim out As String
out = Encypt.Encrypt(orgString,"ENCR_KEY")

解密:
dim InStr as String
InStr = Encypt.Decrypt(out,"ENCR_KEY"))

Montaque 2003-10-24
  • 打赏
  • 举报
回复
呵呵,那是不可逆的。

MD5 是哈希运算
xixigongzhu 2003-10-24
  • 打赏
  • 举报
回复
加密:
static byte[] Encrypt(byte[] data, byte[] key) {
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des进行加密
MemoryStream ms = new MemoryStream();//存储加密后的数据
CryptoStream cs = new CryptoStream(ms,desc.CreateEncryptor(key, key),CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);//进行加密
cs.FlushFinalBlock();
return ms.ToArray();//取加密后的数据
}

解密:
static byte[] Decrypt(byte[] data, byte[] key) {
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();//存储解密后的数据
CryptoStream cs = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);//解密数据
cs.FlushFinalBlock();
return ms.ToArray();
}

注意几个问题:
DES加密算法是对称加密,它的Key是8个字节,即64位,加密和解密的Key必须一样。
liushiying 2003-10-23
  • 打赏
  • 举报
回复
是字节流
falcon99 2003-10-22
  • 打赏
  • 举报
回复
up
Surpass 2003-10-22
  • 打赏
  • 举报
回复
关注
xixigongzhu 2003-10-22
  • 打赏
  • 举报
回复
具体些:是什么算法?数据是字符串还是字节流?
programmeraaron 2003-10-22
  • 打赏
  • 举报
回复
密文=system.web.security.formsauthentication.encrypt("password","md5")
解密不知道

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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