Swift 简单异或加密
Swift Simple XOR Encryption
我正在尝试在 Swift 中执行一个简单的异或加密例程。我知道这不是一种特别安全或很好的方法,但我只需要它很简单。我知道 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;
}
如能提供帮助,将不胜感激!
我建议像这样对 String 进行扩展。
extension String {
func encodeWithXorByte(key: UInt8) -> String {
return String(bytes: map(self.utf8){[=10=] ^ key}, encoding: NSUTF8StringEncoding)!
}
由内而外,
- 对 self.utf8 的调用从字符串
创建了一个字节数组[UInt8]
- 在每个元素上调用 map() 并与键值
进行异或运算
- 从异或字节数组创建了一个新的 String 对象
这是我的 Playground 屏幕截图。
更新:对于 Swift 2.0
extension String {
func encodeWithXorByte(key: UInt8) -> String {
return String(bytes: self.utf8.map{[=11=] ^ key}, encoding: NSUTF8StringEncoding) ?? ""
}
}
我还不能回答评论,但是 Price Ringo,我注意到你的沙箱有几个问题..
最后一行有 2 个错误,您实际上应该将其与原始加密的 UInt8 进行异或运算,而您并不是 "decoding" 加密的字符串..
你有...
println(str.encodeWithXorByte(0))
你应该在哪里..
println(encrypted.encodeWithXorByte(28))
我正在尝试在 Swift 中执行一个简单的异或加密例程。我知道这不是一种特别安全或很好的方法,但我只需要它很简单。我知道 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;
}
如能提供帮助,将不胜感激!
我建议像这样对 String 进行扩展。
extension String {
func encodeWithXorByte(key: UInt8) -> String {
return String(bytes: map(self.utf8){[=10=] ^ key}, encoding: NSUTF8StringEncoding)!
}
由内而外,
- 对 self.utf8 的调用从字符串 创建了一个字节数组
- 在每个元素上调用 map() 并与键值 进行异或运算
- 从异或字节数组创建了一个新的 String 对象
[UInt8]
这是我的 Playground 屏幕截图。
更新:对于 Swift 2.0
extension String {
func encodeWithXorByte(key: UInt8) -> String {
return String(bytes: self.utf8.map{[=11=] ^ key}, encoding: NSUTF8StringEncoding) ?? ""
}
}
我还不能回答评论,但是 Price Ringo,我注意到你的沙箱有几个问题..
最后一行有 2 个错误,您实际上应该将其与原始加密的 UInt8 进行异或运算,而您并不是 "decoding" 加密的字符串..
你有...
println(str.encodeWithXorByte(0))
你应该在哪里..
println(encrypted.encodeWithXorByte(28))