以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]狐表引用vb.net编写DEC加密解密程序?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42404)

--  作者:浙江仔
--  发布时间:2013/11/11 8:50:00
--  [求助]狐表引用vb.net编写DEC加密解密程序?

网上找到这么一个加密解密的方法,不知道怎么转换到狐表中来,再次求助,谢谢帮忙:

在vb.NET中编写DEC加密程序 ,因为vb.NET的类库中就自带了相应的函数,下面分别是加密函数和解密函数。
  加密函数:

  Public Shared Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String

  Dim DES As New DESCryptoServiceProvider()

  Dim inputByteArray() As Byte

  inputByteArray = Encoding.Default.GetBytes(pToEncrypt)

  \'\'建立加密对象的密钥和偏移量

  \'\'原文使用ASCIIEncoding.ASCII方法的GetBytes方法

  \'\'使得输入密码必须输入英文文本

  DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)

  DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

  \'\'写二进制数组到加密流

  \'\'(把内存流中的内容全部写入)

  Dim ms As New System.IO.MemoryStream()

  Dim cs As New CryptoStream(ms, DES.CreateEncryptor, CryptoStreamMode.Write)

  \'\'写二进制数组到加密流

  \'\'(把内存流中的内容全部写入)

  cs.Write(inputByteArray, 0, inputByteArray.Length)

  cs.FlushFinalBlock()

  \'\'建立输出字符串

  Dim ret As New StringBuilder()

  Dim b As Byte

  For Each b In ms.ToArray()

  ret.AppendFormat("", b)

  Next

  Return ret.ToString()

  End Function

------------------------------------------------------------------

  解密函数:

  Public Shared Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String

  Dim DES As New DESCryptoServiceProvider()

  \'\'把字符串放入byte数组

  Dim len As Integer

  len = pToDecrypt.Length / 2 - 1

  Dim inputByteArray(len) As Byte

  Dim x, i As Integer

  For x = 0 To len

  i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)

  inputByteArray(x) = CType(i, Byte)

  Next

  \'\'建立加密对象的密钥和偏移量,此值重要,不能修改

  DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)

  DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

  Dim ms As New System.IO.MemoryStream()

  Dim cs As New CryptoStream(ms, DES.CreateDecryptor, CryptoStreamMode.Write)

  cs.Write(inputByteArray, 0, inputByteArray.Length)

  cs.FlushFinalBlock()

  Return Encoding.Default.GetString(ms.ToArray)

  End Function

-------------------------------------------

  两个函数中第一个参数是待加密或解密的字符串,sKey是使用的密钥,必须是8位,使用的时候要注意哦,不然会出错的。

 

dll文件:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:mscorlib.zip


--  作者:浙江仔
--  发布时间:2013/11/11 10:10:00
--  
人工置顶
--  作者:狐狸爸爸
--  发布时间:2013/11/11 10:10:00
--  

1、添加命名空间,空间缩写为sur, sur可以随便取,但是要和代码保持一致:

 

 
图片点击可在新窗口打开查看此主题相关图片如下:001.jpg
图片点击可在新窗口打开查看

 

2、将下面的修改后的代码复制到foxtable的全局代码中,注意加粗的:

 

Public Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
Dim DES As New sur.DESCryptoServiceProvider()
Dim inputByteArray() As Byte
inputByteArray = Encoding.Default.GetBytes(pToEncrypt)
\'\'建立加密对象的密钥和偏移量
\'\'原文使用ASCIIEncoding.ASCII方法的GetBytes方法
\'\'使得输入密码必须输入英文文本
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
\'\'写二进制数组到加密流
\'\'(把内存流中的内容全部写入)
Dim ms As New System.IO.MemoryStream()
Dim cs As New sur.CryptoStream(ms, DES.CreateEncryptor, sur.CryptoStreamMode.Write)
\'\'写二进制数组到加密流
\'\'(把内存流中的内容全部写入)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
\'\'建立输出字符串
Dim ret As New StringBuilder()
Dim b As Byte
For Each b In ms.ToArray()
    ret.AppendFormat("", b)
Next
Return ret.ToString()
End Function


Public Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String
  Dim DES As New sur.DESCryptoServiceProvider()
  \'\'把字符串放入byte数组
  Dim len As Integer
  len = pToDecrypt.Length / 2 - 1
  Dim inputByteArray(len) As Byte
  Dim x, i As Integer
  For x = 0 To len
  i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)
  inputByteArray(x) = CType(i, Byte)
  Next
  \'\'建立加密对象的密钥和偏移量,此值重要,不能修改
  DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
  DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
  Dim ms As New System.IO.MemoryStream()
  Dim cs As New sur.CryptoStream(ms, DES.CreateDecryptor, sur.CryptoStreamMode.Write)
  cs.Write(inputByteArray, 0, inputByteArray.Length)
  cs.FlushFinalBlock()
  Return Encoding.Default.GetString(ms.ToArray)
End Function


 


--  作者:狐狸爸爸
--  发布时间:2013/11/11 10:11:00
--  
所以vb.net的代码其实可以直接在foxtable用的,只是命名空间
--  作者:浙江仔
--  发布时间:2013/11/11 14:54:00
--  
以下是引用狐狸爸爸在2013-11-11 10:10:00的发言:

1、添加命名空间,空间缩写为sur, sur可以随便取,但是要和代码保持一致:

 

 
图片点击可在新窗口打开查看此主题相关图片如下:001.jpg
图片点击可在新窗口打开查看

 

2、将下面的修改后的代码复制到foxtable的全局代码中,注意加粗的:

 

Public Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
Dim DES As New sur.DESCryptoServiceProvider()

.......


 

多谢狐爸,给了这么易懂的范本。

System.Security.Cryptography命名空间直接可以用的啊,我还以为还要添加外部引用。

 

但是程序设置好后,加密解密不起作用,不知道是不是本人设置不当,还望指点。谢谢

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:dec数据加密解密.table


--  作者:浙江仔
--  发布时间:2013/11/11 15:29:00
--  

找到原因了,原来是一个代码问题,红色:

\'加密
Public Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
Dim DES As New sur.DESCryptoServiceProvider()
Dim inputByteArray() As Byte
inputByteArray = Encoding.Default.GetBytes(pToEncrypt)
\'\'建立加密对象的密钥和偏移量
\'\'原文使用ASCIIEncoding.ASCII方法的GetBytes方法
\'\'使得输入密码必须输入英文文本
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
\'\'写二进制数组到加密流
\'\'(把内存流中的内容全部写入)
Dim ms As New System.IO.MemoryStream()
Dim cs As New sur.CryptoStream(ms, DES.CreateEncryptor, sur.CryptoStreamMode.Write)
\'\'写二进制数组到加密流
\'\'(把内存流中的内容全部写入)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
\'\'建立输出字符串
Dim ret As New StringBuilder()
Dim b As Byte
For Each b In ms.ToArray()
    ret.AppendFormat("{0:X2}", b)
Next
Return ret.ToString()
End Function

\'解密
Public Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String
Dim DES As New sur.DESCryptoServiceProvider()
\'\'把字符串放入byte数组
Dim len As Integer
len = pToDecrypt.Length / 2 - 1
Dim inputByteArray(len) As Byte
Dim x, i As Integer
For x = 0 To len
    i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)
    inputByteArray(x) = CType(i, Byte)
Next
\'\'建立加密对象的密钥和偏移量,此值重要,不能修改
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
Dim ms As New System.IO.MemoryStream()
Dim cs As New sur.CryptoStream(ms, DES.CreateDecryptor, sur.CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Encoding.Default.GetString(ms.ToArray)
End Function

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:dec数据加密解密.table

[此贴子已经被作者于2013-11-11 15:45:55编辑过]