我是Swift的新手,现在我只想将java xor加密/解密代码翻译成Swift,后者用于服务器和客户端之间的事务。下面是Java xor代码:
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加密的内容,并尝试了以下链接中的答案:
https://coderwall.com/p/timkvw/simple-xor-encryption-and-decryption-in-swift-playground-code
但与我的java代码相比,他们所有人都无法获得相同的加密字符串,现在我的java代码已经存在,并且无法更改它。
我认为它可能是由十六进制引起的,但是在快速的情况下,我无法找到关于swift xor十六进制的任何地方。
所以我需要的是swift代码可以获得与我已经粘贴的java代码完全相同的加密字符串,我的java客户端生成的加密字符串可以在我的iOS客户端中解密。
非常感谢能帮助我的人!我整整一天都进入了这个世界!
再次感谢。
答案 0 :(得分:0)
解决了,下面是代码。
基于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)!
}
再次感谢所有为BigInt库做出贡献的人,这就是代码看起来如此简单的原因。