设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1813|回复: 4
打印 上一主题 下一主题

[其它] [转帖]一个利用随机数加密字串的算法

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-12-26 01:19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
标题: 一个利用随机数加密字串的算法

选择自 rainstormmaster 的 Blog

关键字:  vb, 随机数, 加密



       首先这个算法没什么特殊之处,只是怕以后找不到,所以放到了这上面

       每个字节加密后有6种结果(占两个字节,如果需要大于6种的话,就要多用1个字节,即占3 个字节),也就是说如果字串占n个字节的话,可能产生的结果为6的n次方个,这个算法破解的强度不大,大家可以完善一下:
  1. '窗体上一个按钮,两个listbox

  2. Option Explicit

  3. Private Sub Command1_Click()

  4.     Dim i As Long

  5.     Dim s As String

  6.     For i = 1 To 100

  7.         s = encode("这是一个测试 hello world")

  8.         List1.AddItem s

  9.         s = decode(s)

  10.         List2.AddItem s

  11.     Next

  12. End Sub



  13. Private Function encode(ByVal s As String) As String '加密

  14.     If Len(s) = 0 Then Exit Function

  15.     Dim buff() As Byte

  16.     buff = StrConv(s, vbFromUnicode)

  17.     Dim i As Long

  18.     Dim j As Byte

  19.     Dim k As Byte, m As Byte

  20.     Dim mstr As String

  21.     mstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"

  22.     Dim outs As String

  23.     i = UBound(buff) + 1

  24.     outs = Space(2 * i)

  25.     Dim temps As String

  26.     For i = 0 To UBound(buff)

  27.         Randomize Time

  28.         j = CByte(5 * (Math.Rnd()) + 0) '最大产生的随机数只能是5,不能再大了,再大的话,就要多用一个字节

  29.         buff(i) = buff(i) Xor j

  30.         k = buff(i) Mod Len(mstr)

  31.         m = buff(i) \ Len(mstr)

  32.         m = m * 2 ^ 3 + j

  33.         temps = Mid(mstr, k + 1, 1) + Mid(mstr, m + 1, 1)

  34.         Mid(outs, 2 * i + 1, 2) = temps

  35.      Next

  36.      encode = outs

  37. End Function



  38. Private Function decode(ByVal s As String) As String '解密

  39.     On Error GoTo myERR

  40.     Dim i As Long

  41.     Dim j As Byte

  42.     Dim k As Byte

  43.     Dim m As Byte

  44.     Dim mstr As String

  45.     mstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"

  46.     Dim t1 As String, t2 As String

  47.     Dim buff() As Byte

  48.     Dim n As Long

  49.     n = 0

  50.     For i = 1 To Len(s) Step 2

  51.         t1 = Mid(s, i, 1)

  52.         t2 = Mid(s, i + 1, 1)

  53.         k = InStr(1, mstr, t1) - 1

  54.         m = InStr(1, mstr, t2) - 1

  55.         j = m \ 2 ^ 3

  56.         m = m - j * 2 ^ 3

  57.         ReDim Preserve buff(n)

  58.         buff(n) = j * Len(mstr) + k

  59.         buff(n) = buff(n) Xor m

  60.         n = n + 1

  61.      Next

  62.      decode = StrConv(buff, vbUnicode)

  63.      Exit Function

  64. myERR:

  65.      decode = ""

  66. End Function
复制代码
作者Blog:http://blog.csdn.netainstormmaster/

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
发表于 2004-12-26 02:31:00 | 只看该作者
收藏
3#
发表于 2004-12-26 18:12:00 | 只看该作者
收藏,一次我发现随机数字在一台机子上每次第一次运行都是相同的,不解。。。。。
4#
发表于 2006-7-23 21:05:00 | 只看该作者
首先要感谢,我去试试
5#
发表于 2006-7-23 21:50:00 | 只看该作者
din
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 22:46 , Processed in 0.099810 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表