2017-08-02 51 views
-1

我正在使用線性反饋移位寄存器,我必須安全地編寫以下邏輯,我選擇了swift,因爲它比目標c更安全 如果我使用以下作爲C文件本身的C邏輯?如果不是我想寫的迅速此代碼的Swift 3.1 eri- tion邏輯

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我試過了,但它崩潰,如下面的截圖,請幫我寫上面的C代碼SWIFT 3.1

enter image description here

回答

1

我真的不知道LFSR,但鑑於你目前的C代碼,我想迅速端口可能是這樣的:

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字符以外的字符的字符串。