ruby网站改版.NET,大牛们来出个点子

haoranchangfeng 2011-03-10 09:57:18
因为业务需要,现在要用.NET来改版一个Ruby网站,首先做登录的时候就遇到了问题,
他原本的加密是

class Crypt
#discuz encrypt function
def self.encrypt(txt, key)
encrypt_key = Digest::MD5.hexdigest(rand(32000).to_s);
ctr = 0
tmp = ''
Range.new(0,txt.length-1).each do |i|
ctr = (ctr==encrypt_key.length ? 0 : ctr)
tmp += encrypt_key[ctr].chr+(txt[i] ^ encrypt_key[ctr]).chr
ctr = ctr+1
end
Base64.encode64(self.key(tmp,key));
end


def self.decrypt(txt,key)
txt = self.key(Base64.decode64(txt),key)
tmp = ''
0.step(txt.length-1,2) do |i|
data = txt[i] ^ txt[i+1]
tmp += data.chr
end
x = self.decode(tmp)
print x.inspect
x
end


def self.key(txt, encrypt_key)
encrypt_key = Digest::MD5.hexdigest(encrypt_key);
ctr = 0;
tmp = '';
0.upto(txt.length-1) do |i|
ctr = ctr==encrypt_key.length ? 0 : ctr
tmp += (txt[i] ^ encrypt_key[ctr]).chr
ctr = ctr+1
end
tmp
end

def self.encode(hash)
raise "passport encode must recieve a hash" unless hash.instance_of? Hash
str = []
hash.each do |key,value|
str << "#{key}="+CGI::escape(value.to_s)
end
str.join("&")
end

def self.decode(txt)
txt.gsub!(/.+\?/,'')
params = Hash.new([].freeze)
txt.split(/[&;]/n).each do |pairs|
key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) }
key = key.to_sym
if params.has_key?(key)
params[key].push(value)
else
params[key] = value
end
end
params
end
#end discuz encrypt function
end



怎么样把这个方法翻译为 C#语言的?或者怎么样在C#中加密才能匹配的对,登录进去?
不知道我描述的清楚不,大家有经验的帮帮忙..
...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
伟少1224 2011-06-20
  • 打赏
  • 举报
回复
你好,请问你这个问题后来怎么解决的啊?谢谢
haoranchangfeng 2011-03-16
  • 打赏
  • 举报
回复
我写了,结果好像不太一样,不过也没关系了..
sugarforever 2011-03-10
  • 打赏
  • 举报
回复
照着它的逻辑C#重写一边就ok了嘛
haoranchangfeng 2011-03-10
  • 打赏
  • 举报
回复
今天怎么没有人呢?怎么样才能把这个类翻译为C#呢?
haoranchangfeng 2011-03-10
  • 打赏
  • 举报
回复

class Crypt
#discuz encrypt function
def self.encrypt(txt, key)
encrypt_key = Digest::MD5.hexdigest(rand(32000).to_s);
ctr = 0
tmp = ''
Range.new(0,txt.length-1).each do |i|
ctr = (ctr==encrypt_key.length ? 0 : ctr)
tmp += encrypt_key[ctr].chr+(txt[i] ^ encrypt_key[ctr]).chr
ctr = ctr+1
end
Base64.encode64(self.key(tmp,key));
end


def self.decrypt(txt,key)
txt = self.key(Base64.decode64(txt),key)
tmp = ''
0.step(txt.length-1,2) do |i|
data = txt[i] ^ txt[i+1]
tmp += data.chr
end
x = self.decode(tmp)
print x.inspect
x
end


def self.key(txt, encrypt_key)
encrypt_key = Digest::MD5.hexdigest(encrypt_key);
ctr = 0;
tmp = '';
0.upto(txt.length-1) do |i|
ctr = ctr==encrypt_key.length ? 0 : ctr
tmp += (txt[i] ^ encrypt_key[ctr]).chr
ctr = ctr+1
end
tmp
end

def self.encode(hash)
raise "passport encode must recieve a hash" unless hash.instance_of? Hash
str = []
hash.each do |key,value|
str << "#{key}="+CGI::escape(value.to_s)
end
str.join("&")
end

def self.decode(txt)
txt.gsub!(/.+\?/,'')
params = Hash.new([].freeze)
txt.split(/[&;]/n).each do |pairs|
key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) }
key = key.to_sym
if params.has_key?(key)
params[key].push(value)
else
params[key] = value
end
end
params
end
#end discuz encrypt function
end


没有插入ruby源码的,就把他当做php插入了..
haoranchangfeng 2011-03-10
  • 打赏
  • 举报
回复
晕,代码没有出来,加密方法是discuz encrypt
链接如下:链接
见链接中得分最高的那个。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧