我正在研究线性反馈移位寄存器,我必须安全地编写以下逻辑,我选择了swift,因为它比目标c更安全 如果我将以下C逻辑用作C文件本身,它是否安全?如果不是我试图在swift中编写以下代码
char * lfsr16_obfuscate( char *s, unsigned int length, unsigned int seed)
{
unsigned int i, lsb;
unsigned int lfsr = seed;
for (i = 0; i < length*8; i++)
{
lsb = lfsr & 1u;
lfsr >>= 1u;
if (lsb == 1u)
{
lfsr ^= 0xB400u;
s[i / 8] ^= 1 << (i % 8);
}
}
return s;
}
以下是我试过的快速equelent,但它正在崩溃,如下面的截图,请帮我在swift 3.1中编写上面的C代码
答案 0 :(得分:1)
我真的不知道LFSR,但鉴于您提供的C代码,我认为swift端口可能是这样的:
func lfsr16_obfuscate(data: String, seed: Int) -> String {
var scalars = Array(data.unicodeScalars).map { UInt8($0.value) }
let len = data.characters.count
var lsb: UInt
var lfsr = UInt(seed)
for i in (0..<len*8) {
lsb = lfsr & 1
lfsr >>= 1
if 1 == lsb {
lfsr ^= 0xB400
scalars[i / 8] ^= UInt8(1 << (i % 8))
}
}
return String(bytes: scalars, encoding: .ascii)!
}
确保您不会使用此函数处理任何包含ASCII字符以外字符的字符串。