나는 이것으로 조금 붙어있다. 나는 그들이 Ario Kuorikoski가 쓴 Typo3에서 찢어진듯한 암호화 알고리즘 버전을 사용하는 API와 인터페이스해야한다.PHP에서 Ruby (Vignere 변형) 암호화 알고리즘
API와 인터페이스하기 위해 루비를 만들어야하기 때문에 루비로 자신의 알고리즘을 포팅해야합니다. 암호화에 관해서는 약간 깊이 있습니다. 날이, 나는 그게가 될 서버의로 루비 1.8.6를 위해 그것을 쓸 필요가있다 난처한 상황에 빠진
private function keyED($txt) {
$encrypt_key = md5($this->encrypt_key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++) {
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1)^substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}
private function encrypt($txt){
srand((double)microtime()*1000000);
$encrypt_key = md5(rand(0,32000));
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($encrypt_key,$ctr,1) .
(substr($txt,$i,1)^substr($encrypt_key,$ctr,1));
$ctr++;
}
return base64_encode($this->keyED($tmp));
}
부분 :
이
는 코드입니다. 문자열에는 XOR이 없습니다. 그게 내가 이해할 수 없다면.어떤 도움, 조언, 아이디어라도 많이 감사하겠습니다.
부록 :
내가 어떤 코드까지를 두지 않았다 실현, 유일한 어려움은 실제로 XOR 문제이지만, 여기에 지금까지 내 코드입니다 : Erik Veenstra에서
def xor(s1,s2)
if s2.empty? then
return s1
else
a1 = s1.unpack("c*")
a2 = s2.unpack("c*")
a2 *= 2 while a2.length < a1.length
return a1.zip(a2).collect {|c1,c2| c1^c2}.pack("c*")
end
end
def keyED(str)
encrypt_key = Digest::MD5.digest(@key)
ctr = 0
tmp = ''
for i in 0...str.length do
ctr = 0 if ctr == encrypt_key.length
tmp << xor(str.slice(i,1), encrypt_key.slice(ctr,1)).to_s
ctr = ctr + 1
end
return tmp
end
# === Ported Code
# This code was ported from Ari's Typo 3 Session Encryption
def encrypt(str)
encrypt_key = Digest::MD5.digest(rand(32000).to_s)
ctr = 0
tmp = ''
for i in 0...str.length do
ctr=0 if ctr==encrypt_key.length
tmp << encrypt_key.slice(ctr,1) << xor(str.slice(i,1), encrypt_key.slice(ctr,1))
ctr = ctr + 1
end
return Base64.encode64(keyED(tmp))
end
def decrypt(str)
txt = keyED(str)
tmp = ''
for i in 0...txt.length do
md = txt.slice(i,1)
i = i + 1
tmp << xor(txt.slice(i,1),md)
end
puts "Decrypte string:#{Base64.decode64(tmp)}EOSTRING"
end
한 가지, 당신은 STR [I]와 ENCRYPT_KEY [CTR]을 시도하여 Fixnum이라는를 얻고, 하나가 작동하지 않았다 그 ... 그상의 XOR를 수행하지만 수도 수 있다는 것입니다 코드의 다른 부분을 어색하게 만들었습니다. –
업데이트로, 나는 php 함수를 사용하여 tokenmaker.php 파일을 만들고 net/http를 사용하여이를 호출함으로써 문제를 해결합니다. 나는 이런 식으로하는 것이 싫지만 일정대로 진행된다. 정말이 문제에 대한 해결책을 찾고 싶습니다. –