2013-10-21 35 views
-1

我收到了在excel文件中創建的口令。 密碼使用Excel xorc功能「加密」。在java中使用Excel函數xorc

現在我試圖建立在一個Java程序中的相同。

當我使用xor ^函數時,我沒有收到與excel中相同的結果。

是否有人知道如何創建一個java xor函數巫女提供像excel xorc一樣的結果?

結果Excel中:
鍵:鎖
輸入:650827-25
XORC輸出:XXX [[TT_YOZZ

= XORC( 「650827-25」, 「鎖定」)

我的Java應用程序的

結果:
鍵:鎖定
輸入:650827-25
XORC輸出:ZZSS^XNYY

XOR_Codierer

public class XOR_Codierer extends Encoder { 

private char[] key; 
private char[] password; 

public XOR_Codierer(String k){ 
    key = k.toCharArray(); 
} 

public String encode(String s){ 
    password = s.toCharArray(); 

    int pl=password.length; 
    int kl=key.length; 
    char[] newmsg=new char[pl]; 

    for (int i=0; i<pl; i++){ 
      newmsg[i]=(char)(password[i]^key[i%kl]); 
    }  


return new String(newmsg); 
} 

public String decode(String s){ 
    return encode(s); 
} 
} 

演示

public class Demo{ 

public static void demo(Encoder enc, String text) { 
    String encoded = ((XOR_Codierer) enc).encode(text); 
    System.out.println("codiert : " + encoded); 
    String decoded = ((XOR_Codierer) enc).decode(encoded); 
    System.out.println("decodiert: " + decoded); 

    if (text.equals(decoded)) 
     System.out.println("Verschluesselung erfolgreich!"); 
    else 
     System.out.println("PROGRAMMFEHLER!"); 
} 

public static void main(String[] args){ 
String key = "lock"; 
String text = "650827-25"; 
Encoder enc = new XOR_Codierer(key); 
demo(enc, text); 
} 
} 

回答

1

由於XORC(假設我已經發現正確的函數)似乎使用更復雜的算法比你實施.... http://www.vbaexpress.com/kb/getarticle.php?kb_id=951

Function XorC(ByVal sData As String, ByVal sKey As String) As String 
    Dim l As Long, i As Long, byIn() As Byte, byOut() As Byte, byKey() As Byte 
    Dim bEncOrDec As Boolean 
    'confirm valid string and key input:' 
    If Len(sData) = 0 Or Len(sKey) = 0 Then XorC = "Invalid argument(s) used": Exit Function 
    'check whether running encryption or decryption (flagged by presence of "xxx" at start of sData):' 
    If Left$(sData, 3) = "xxx" Then 
     bEncOrDec = False 'decryption' 
     sData = Mid$(sData, 4) 
    Else 
     bEncOrDec = True 'encryption' 
    End If 
    'assign strings to byte arrays (unicode)' 
    byIn = sData 
    byOut = sData 
    byKey = sKey 
    l = LBound(byKey) 
    For i = LBound(byIn) To UBound(byIn) - 1 Step 2 
     byOut(i) = ((byIn(i) + Not bEncOrDec) Xor byKey(l)) - bEncOrDec 'avoid Chr$(0) by using bEncOrDec flag' 
     l = l + 2 
     If l > UBound(byKey) Then l = LBound(byKey) 'ensure stay within bounds of Key' 
    Next i 
    XorC = byOut 
    If bEncOrDec Then XorC = "xxx" & XorC 'add "xxx" onto encrypted text' 
End Function 
+0

嗨Caleryn 謝謝。 是的,這是接縫功能。我會盡力把它翻譯成java。 –