Swift Simple XOR加密

时间:2015-01-26 04:26:20

标签: swift xor

我正在尝试在Swift中执行一个简单的xor加密例程。我知道这不是一个特别安全或很好的方法,但我只需要简单。我知道代码是如何在Javascript中实现的,我只是在将它转换为Swift时遇到了麻烦。

使用Javascript:

function xor_str()
{
  var to_enc = "string to encrypt";

  var xor_key=28
  var the_res="";//the result will be here
  for(i=0;i<to_enc.length;++i)
  {
    the_res+=String.fromCharCode(xor_key^to_enc.charCodeAt(i));
  }
  document.forms['the_form'].elements.res.value=the_res;
}

你能提供的任何帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:16)

我建议像这样扩展String。

extension String {
    func encodeWithXorByte(key: UInt8) -> String {
        return String(bytes: map(self.utf8){$0 ^ key}, encoding: NSUTF8StringEncoding)!
}

从内到外,

  1. 对self.utf8的调用会从字符串
  2. 创建一个字节数组[UInt8]
  3. 在每个元素上调用map()并使用键值
  4. 进行异或
  5. 从XOR'ed字节数组
  6. 创建一个新的String对象

    这是我的Playground屏幕截图。 enter image description here

    更新:适用于Swift 2.0

    extension String {
      func encodeWithXorByte(key: UInt8) -> String {
        return String(bytes: self.utf8.map{$0 ^ key}, encoding: NSUTF8StringEncoding) ?? ""
      }
    }
    

答案 1 :(得分:3)

我无法回复评论,但是Price Ringo,我注意到你的沙箱有几个问题..

最后一行有2个错误,你应该用原始的加密UInt8对它进行异或,你不是&#34;解码&#34;加密的字符串..

你有......

println(str.encodeWithXorByte(0))

你应该有......

println(encrypted.encodeWithXorByte(28))