2017-07-13 21 views
1

を解読、今私は、サーバーとクライアント間の取引に使用されスウィフト、にコードを復号化/ JavaのXORの暗号化を翻訳したいです。以下は、JavaののXORコードです:スウィフトのBigIntegerのXOR暗号化/ Iは、スウィフトに新たなんだ

public static String encrypt(String password, String key) { 
    if (password == null) 
     return ""; 
    if (password.length() == 0) 
     return ""; 

    BigInteger bi_passwd = new BigInteger(password.getBytes()); 

    BigInteger bi_r0 = new BigInteger(key); 
    BigInteger bi_r1 = bi_r0.xor(bi_passwd); 

    return bi_r1.toString(16); 
} 

public static String decrypt(String encrypted, String key) { 
    if (encrypted == null) 
     return ""; 
    if (encrypted.length() == 0) 
     return ""; 

    BigInteger bi_confuse = new BigInteger(key); 

    try { 
     BigInteger bi_r1 = new BigInteger(encrypted, 16); 
     BigInteger bi_r0 = bi_r1.xor(bi_confuse); 

     return new String(bi_r0.toByteArray()); 
    } catch (Exception e) { 
     return ""; 
    } 
} 

そして私は、迅速なXOR暗号化について多くのことを検索し、以下のリンクで答えを試してみた:

XOR Encryption in Swift IOS

https://coderwall.com/p/timkvw/simple-xor-encryption-and-decryption-in-swift-playground-code

Swift Simple XOR Encryption

しかし、それらのすべては、私のJavaコード、今の私のJava、Cと比較して、同じencryted文字列を取得することはできませんオードは生きていて、それを変更する方法はありません。

私はそれを16進によって引き起こされるかもしれないと思ったが、迅速に、私はどこにでも迅速XORの16進数について見つけることができません。

だから私は必要なものSWIFTコードは、私が貼り付けられてきたJavaコードと全く同じ暗号化された文字列を取得することができ、私のJavaクライアントによって生成された暗号化された文字列は、私のiOSクライアントで復号化することが可能です。このうち私を助けることができる非常に誰

ありがとう!私は一日中これに入る!

もう一度おねがいします。

答えて

0

以下はコードです。コードは非常にシンプルに見える理由ですのBigIntライブラリに貢献した人は誰でも皆のため再びhttps://github.com/lorentey/BigInt

func encrypt(str:String, key:BigUInt)->String 
{ 
    let value = BigUInt(str.data(using: String.Encoding.utf8)!) 
    let encrypt = key^value 
    return String(encrypt, radix: 16) 
} 

func decrypt(str:String, key:BigUInt)->String 
{ 
    let value = BigUInt(str, radix: 16)! 
    let decrypt = key^value 
    return String(data: decrypt.serialize(), encoding: String.Encoding.utf8)! 
} 

おかげで、で素晴らしい作品に基づいて

関連する問題