设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 8096|回复: 19
打印 上一主题 下一主题

[原创发布] [解禁] RM 实现 Base64 字符串加密和解密

 关闭 [复制链接]

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

跳转到指定楼层
1
发表于 2008-9-5 05:18:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 后知后觉 于 2009-12-6 17:38 编辑

还是用RM实现了{/wx}

目前我测试下来的速度 Zlib快这个2倍

代码因该还有改进的空间

为什么解禁了呢 因为密钥的关系 可以自己定义 比如颠倒码表顺序

只要没人知道你密钥 就难以解出正确字符串


=begin
  
   Base64加密算法
  
   作者: 秀秀
   
   使用方法:
   
   1.加密

   Base64.encode64(string)
   
     string必须是字符串
   
   2.解密
   
   Base64.decode64(string)
   
     string必须是Base64加密过的字符串
   
   例子:
   
    a = Base64.encode64("张三李四abcd1234")

    p Base64.decode64(a)
   
   
=end


module Base64
  
  module_function
  
  # 码表
  
  CharBase64 = {
  0 => "A", 17 => "R", 34 => "i", 51 => "z",
  1 => "B", 18 => "S", 35 => "j", 52 => "0",
  2 => "C", 19 => "T", 36 => "k", 53 => "1",
  3 => "D", 20 => "U", 37 => "l", 54 => "2",
  4 => "E", 21 => "V", 38 => "m", 55 => "3",
  5 => "F", 22 => "W", 39 => "n", 56 => "4",
  6 => "G", 23 => "X", 40 => "o", 57 => "5",
  7 => "H", 24 => "Y", 41 => "p", 58 => "6",
  8 => "I", 25 => "Z", 42 => "q", 59 => "7",
  9 => "J", 26 => "a", 43 => "r", 60 => "8",
  10 => "K", 27 => "b", 44 => "s", 61 => "9",
  11 => "L", 28 => "c", 45 => "t", 62 => "+",
  12 => "M", 29 => "d", 46 => "u", 63 => "/",
  13 => "N", 30 => "e", 47 => "v", 64 => "=",
  14 => "O", 31 => "f", 48 => "w",
  15 => "P", 32 => "g", 49 => "x",
  16 => "Q", 33 => "h", 50 => "y"
  }

  # 加密
  def encode64(str)
   
    raise "参数不是一个字符串" unless str.kind_of?(String)
   
    tstr = str.unpack("B*")

    size = tstr[0].size/6
    ysize = tstr[0].size%6

    tstr2 = []
    for i in 0...size
      tstr2 << tstr[0][i*6,6]
    end  
   
    # 割断码
    if tstr[0].size%6 != 0
      tstr2 << tstr[0][size*6,ysize] + ("0"*(6-ysize))
      ym = (6- ysize)/2
    end
   
    # 补足码
    tstr2.collect!{|n|CharBase64[eval("0b"+"00"+n)]}

    # 特殊码
    if ysize != 0
      case ym
      when 1
        tstr2 << CharBase64[64]
      when 2
        tstr2 << CharBase64[64]
        tstr2 << CharBase64[64]
      end  
    end  
    return tstr2.join
  end
  
  # 解密
  def decode64(str)
    stra = str.split(//)
   
    t = 0
    stra.each{|n|
    t += 1 if n == CharBase64[64]
    }
   
    t.times{stra.pop}
   
    strb = []
    strc = ""
   
    dbase64 = CharBase64.invert

    stra.each {|n|strb << dbase64[n]}
   
    strb.collect! do |n|   
     n.to_s(2).length != 6 ? "0"*(6 - n.to_s(2).length) + n.to_s(2) : n.to_s(2)
    end  
   
    if t > 0
      tt = strb[strb.size-1]
      t*2.times{tt.slice!(tt.size-1,1)}
      strb[strb.size-1] = tt
    end

    strb.each{|n|strc+=n}

    return [strc].pack("B*").delete("\000")


# 以下是放弃的一些比较慢的算法
=begin
    stra.each do |n|
      for i in CharBase64.soft
        if i[1] == n
          strb << i[0]
          break
        end
      end  
    end

    strb.each do |n|
      if n.to_s(2).length != 6
        l = 6 - n.to_s(2).length
        strc += "0"*l + n.to_s(2)
      else
        strc += n.to_s(2)
      end  
    end

    for i in 0...strc.size/6
      strd << strc[6*i,6]
    end
=end

  end

end  


class Hash < Object
  def soft
    @temp = []
    self.each_pair{|key, value| @temp << [key,value] }
    return @temp
  end  
end
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-7-1
帖子
552
2
发表于 2008-9-5 08:06:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
3
发表于 2008-9-5 16:09:59 | 只看该作者
呵~··
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
129
在线时间
148 小时
注册时间
2008-2-11
帖子
429
4
发表于 2008-9-5 16:52:57 | 只看该作者
请问……怎么使用呢?


编程盲飘过~~~
要守护就守护到底,要放弃就别再回头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

5
 楼主| 发表于 2008-9-5 21:15:10 | 只看该作者
不是有使用说明的吗....

有人测试过吗 效率如何?
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-10
帖子
273
6
发表于 2008-9-6 23:11:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

7
发表于 2008-9-7 01:07:12 | 只看该作者
加密游戏的?
还是干嘛的…… = =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

8
 楼主| 发表于 2008-9-7 01:11:31 | 只看该作者
a = Base64.encode64("张三李四abcd1234")

   p Base64.decode64(a)

先把以上代码放到脚本里去

a = Base64.encode64("张三李四abcd1234")
p a
p Base64.decode64(a)

这样运行下
就知道了
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
129
在线时间
148 小时
注册时间
2008-2-11
帖子
429
9
发表于 2008-9-7 01:14:42 | 只看该作者
刚才研究了一下

还是不会加密

我错了~

指点一下好么
要守护就守护到底,要放弃就别再回头。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

创世.神隐

梦石
0
星屑
99
在线时间
195 小时
注册时间
2005-10-15
帖子
4040
10
发表于 2008-9-7 01:40:44 | 只看该作者
夏娜出现了...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 05:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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