论坛首页 编程语言技术论坛

base64编码

浏览 5428 次
锁定老帖子 主题:base64编码
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-06-03   最后修改:2010-06-22
        受有道难题中许多答复者的启发,我决定对base64编码也研究一下,因为看起来这个问题在Ruby下是相当的easy。这种做法的问题在于:诸如汉字这样的字符不能还原。。代码如下:
BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
def enBASE64(s)
	s.unpack("B*")[0].scan(/\d{1,6}/).map!{|x|
		if x.size==6
			BASE[("0"*2+x).to_i(2)].chr
		elsif		
	  	m=BASE[("0"*2+x.ljust(6,"0")).to_i(2)].chr + ("="*((x.size)%3))#这里主要是填充'='
	  	m
		end
	}.join
end

p enBASE64("if not this is love")

def deBASE64(s)
	i=s.count('=')
	s.tr!('=','')		
	t=s.split(//)
	t.map!{|x|
		g="%08b" %BASE.index(x)
		if i==0 || x!=t.last		
			g[2,6]
		else 		
			i==1?g[2,4]:g[2,2]	#根据填充符号(=)的数量,提取相应的长度	
  	end
  }
   t.join.scan(/\d{8}/).map{|x|x.to_i(2).chr}.join	
end
 p deBASE64("aWYgbm90IHRoaXMgaXMgbG92ZQ==")

是不是很简单,其实用
    def encode64(bin)
    [bin].pack("m")
  end


也可以很简单的实现,同样的,解密也很简单。但是其中隐藏了许多的细节,我们并不清楚,对于我们掌握base64编码的原理并没有帮助。自己写一个的话,可以了解其中的奥秘。


主要参考资料:
http://en.wikipedia.org/wiki/Base64
矛与盾的较量(4)——奇妙的Base64编码
http://tools.ietf.org/html/rfc3548#section-3

   发表时间:2010-06-11  
佩服楼主的钻研精神!
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics