discuz 加密解密 authcode 用Ruby 1.9 实现 (可用),该如何解决
发布时间:2011-06-29 18:44:07 文章来源:www.iduyao.cn 采编人员:星星草
discuz 加密解密 authcode 用Ruby 1.9 实现 (可用)
[code=ruby]
def self.authcode(str, decode=true, key='', expiry=0)
return unless str
str = decode ? str+'====' : str.gsub(/\\t/,"\t")
ckey_length = 4
key = Digest::MD5.hexdigest(!key.empty? ? key : 'tool')
keya = Digest::MD5.hexdigest(key[0,16])
keyb = Digest::MD5.hexdigest(key[16,16])
keyc = decode ? str[0,ckey_length] : Digest::MD5.hexdigest("#{Time.now.to_f} #{Time.now.to_i}")[-ckey_length,ckey_length]
cryptkey = keya + Digest::MD5.hexdigest(keya+keyc)
key_length = cryptkey.size
str = decode ? Base64.decode64(str[ckey_length..-1]) : format("%010d",(expiry!=0 ? expiry + Time.now.to_i : 0)).to_s + Digest::MD5.hexdigest(str+keyb)[0,16]+str
str_length = str.size
result = ''
box = {}
(0..255).each { |i| box[i] = i}
rndkey = {}
(0..255).each do |i|
rndkey[i] = (cryptkey[i % key_length,1]).ord
end
j = 0
(0..255).each do |i|
j = (j + box[i].to_i + rndkey[i].to_i) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp
end
a=j=0
(0..str_length-1).each do |i|
a = (a+1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
ks = box[(box[a].to_i + box[j].to_i)%256]
result < < (str[i].ord ^ ks.to_i ).chr
end
if decode
if (result[0,10].to_i ==0 || (result[0,10].to_i - Time.now.to_i) > 0) && result[10,16] == (Digest::MD5.hexdigest(result[26..-1] + keyb)[0,16])
return result[26..-1]
else
return ''
end
else
return keyc+Base64.encode64(result).sub('=','')
end
end
[/code]
------解决方案--------------------
支持!
------解决方案--------------------
一直都不知道怎么用Ruby搞这些加密/解密的东东。
------解决方案--------------------
是你自己改的吗
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
Redmine+Git,在版本库菜单中404错误怎么回事?
在配置中用Git方式管理代码,加上了本地Git库路径:
/home/git/repositories/project.g...
-
一段RUBY代码,既不报错,但是不输出结果,帮忙看下
class Song
def initialize(name,artist,duration)
@name = name
@ar...
-
有没有人使用《Web开发敏捷之道》这本书的测试出了问题啊……
正在用《Web开发敏捷之道》第3版,测试这一块出现了问题,然后接着问题...
-
关于rake命令撤销 migrations
我这里遇到一个难题:
a.) ruby script/generation migration add_price_to_product_99 price:decima...
-
Ruby on Rails 如何实现完成大型数据库的实现与管理及维护
前些天在一家公司实习进行Web开发时 所用的语言是ruby 环境是 rails ...
-
RoR菜鸟求助
我在Windows系统上安装了ruby 1.9.3p0 (2011-10-30) [i386-mingw32],
然后安装了Rails 3.1.2,
因为mysql2 0.3.10没有w...
-
三个月可以做个EC网站吗?
像这种规模的:
http://www.infotop.jp
顺便问一下,在中国有这样的信息素材网站吗?
------解决方案-------...
-
网上的rails视频中用的是什么IDE
网上有一些老外的rails讲解视频,我想问下他们用的那个是什么IDE,不胜感激
------解决方案-------...
-
安装gem的路径问题
近日需要使用redis, 因为网络连不上gem, 我下载了源码准备本地安装.安装时一切顺利, gem list也显示已经安装...
-
ruby 连接 mysql 的问题
想用ruby 连接 mysql
修改database.yml
# SQLite version 3.x
# gem install sqlite3
#
# Ensure ...