2012-02-02 2 views
-1

누군가이 VB 함수를 Perl로 변환 할 수 있습니까? (PHP, Ruby 또는 Python도 가능합니까?)VB 함수를 Perl로 변환

Public Function CFUSION_ENCRYPT(ByVal Password As String, ByVal Key As String) As String 
    Dim NewValue As String 
    Dim TempValue As String 
    NewValue = "" 
    For i = 1 To Len(Password) 
    TempValue = Asc(Mid(Key, i, 1)) Xor Asc(Mid(Password, i, 1)) 
    NewValue = NewValue & Format(Hex(TempValue), "00") 
    Next 
    CFUSION_ENCRYPT = NewValue 
End Function 

대단히 감사합니다. PHP에서

+1

난 당신이 자신을 시도하고 문제가 발생할 경우 다음 도움을 요청한다고 생각합니다. – vmpstr

+0

암호가 키보다 길면 어떻게됩니까? – ikegami

+0

** ** 암호화가 아닙니다. 그것은 최고의 스크램블이나 사이퍼입니다. –

답변

0

: 나는 희망

def CFUSION_ENCRYPT(password, key): 
    if len(password) > len(key): 
     raise Exception('Key must be at least as long as password') 

    result = '' 
    for password_char, key_char in zip(password, key): 
     result += '%0.2X' % (ord(key_char)^ord(password_char)) 
    return result 

: 결과는 정말 같은

+0

작동 확인, 감사합니다 knittl. – bsteo

0

내 펄의 약간 녹슨 경우

function cfusion_encrypt($password, $key) { 
    $new = ''; 
    $tmp = ''; 
    for($i = 0, $l = strlen($password); $i < $l; ++i) { 
    $tmp = ord(substr($key, $i, 1))^ord(substr($password, $i, 1)); 
    $new &= sprintf('%02X', $tmp); 
    } 
    return $new; 
} 

테스트하십시오 여기 (안된) 파이썬 버전입니다 당신은 암호로 강건하기로되어있는 것에는 이것을 사용하지 않고 있습니다 ...

+0

감사합니다 카메론, 포트가 잘 작동합니다. 아니요. 저는 역사적인 암호화 방법을 테스트합니다. – bsteo

2

도대체 ... perl :

sub cfusion_encrypt 
{ 
    my ($password, $key) = @_; 

    my @p = split(//, $password); 
    my @k = split(//, $key); 
    my $end = $#p < $#k ? $#p : $#k; # which is shorter, key or password? 
    my @result =(); 

    for my $i (0 .. $end) 
    { 
     push @result, sprintf('%0.2x', ord($p[$i]^$k[$i])); 
    } 

    join('', @result); 
} 

@Cameron이 말했듯이 이것이 좋은 암호화라고 생각하지 마십시오. 또한 키가 최소한 암호와 동일한 지 확인하는 것이 좋습니다. 그냥 theglauber와 골프 정렬의

+0

감사합니다 theglauber, 이것은 또한 달콤한 :) 감사합니다 너희들! 모두에게 "대답"을 설정할 수 있습니까? :) – bsteo

+0

당신을 진심으로 환영합니다. 난 그냥 출력을 16 진수 문자열로 원한다는 것을 깨달았습니다. 그래서 위의 코드를 수정했습니다. – theglauber

2

:

join('', List::MoreUtils::pairwise { 
       $a and $b and $a^$b or ''; 
      } 
      @{[ split(//, $password) ]} 
      , @{[ split(//, $key) ]} 
     ); 
관련 문제