我正在研究线性反馈移位寄存器,我必须安全地编写以下逻辑,我选择了 swift,因为它比 Objective 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;
}
下面是我尝试过的 swift equelent,但是它崩溃了,如下截图所示,请帮我在 swift 3.1 中编写上面的 C 代码
最佳答案
我不太了解 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 字符以外的字符的字符串。
关于c - 这段代码的 Swift 3.1 等效逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45453429/