gpt4 book ai didi

ios - 从 NSData 转换回来时,字符串为零

转载 作者:行者123 更新时间:2023-11-30 11:56:58 25 4
gpt4 key购买 nike

我正在尝试使用 C 库加密十六进制字符串,这是连接 Swift、Objective-C 和 C 的英雄壮举。

但是,当我将 NSData 转换为 String 时,最终结果是 nil

我从这个开始:

let fakeHex = "9F1D53E732E48F25F94711D5B22086778278624F715D9B2BEC8FB81134E7C904".toData()
let data = Data(repeating: 1, count: 32)

data 是一组 32 个 true

fakeHex 是一个硬编码的十六进制,我通过以下扩展对其进行 UTF8 编码:

extension String {

func toData() -> Data {
let data = NSMutableData()
let terminator = [0]
for char in self {
let encodedString = String(char).data(using: .utf8)!
data.append(encodedString)
data.append(terminator, length: 1)
}

return Data(referencing: data)
}

}

接下来,我有一个名为 Blakey 的 Objective-C 类,它采用十六进制 NSDatatrueNSData 并通过 Blake2 对它们进行哈希处理哈希算法:

let x = Blakey().createKeyPair(withHexData: fakeHex, andIndexData: data) 

^ 这也会返回一些 NSData

- (NSData *)createKeyPairWithHexData:(NSData *)data andIndexData:(NSData *)indexData;
{
struct blake2b_state__ state;
blake2b_init(&state, 32);

blake2b_update(&state, data.bytes, data.length); // data.length is 128
blake2b_update(&state, indexData.bytes, indexData.length); // indexData.length is 32

void *foo = malloc(32);
blake2b_final(&state, foo, 32);

NSData *accountKey = [NSData dataWithBytes:foo length:32];

free(foo);

return accountKey;
}

此代码是根据 Python 中的配套实现中所发生的情况建模的:

def seed_account(seed, index):
# (seed here is our hex string, index is 1)
# Given an account seed and index #, provide the account private and public keys
h = blake2b(digest_size=32)

seed_data = BitArray(hex=seed)
seed_index = BitArray(int=index,length=32)

h.update(seed_data.bytes)
h.update(seed_index.bytes)

return account_key = BitArray(h.digest())

最后,我从 Blakey 函数中获取 NSData 并尝试将其转换为字符串:

NSString(data: x!, encoding: String.Encoding.utf8.rawValue)
String(data: x!, encoding: .utf8)

两者都打印nil

我在这个过程中做错了一些事情,不知道是什么。如果有什么突出的事情,希望得到一些帮助。

谢谢!

最佳答案

您在每个字符后面附加终止符,但您可能希望将其附加在字符串的末尾(这个data.append(terminator, length: 1))

关于ios - 从 NSData 转换回来时,字符串为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47698536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com