2

我试图找出在 Objective-C 中使用 NaCl 库的正确方法是什么。密钥生成似乎很容易:

- (void) generateKeypair {
    unsigned char pk[crypto_box_PUBLICKEYBYTES];
    unsigned char sk[crypto_box_SECRETKEYBYTES];

    sodium_init();
    crypto_box_keypair(pk,sk);
    self.publicKey = [NSData dataWithBytes:(const void *)pk
                                            length:sizeof(unsigned char)*crypto_box_PUBLICKEYBYTES];
    self.sekretKey = [NSData dataWithBytes:(const void *)sk
                                            length:sizeof(unsigned char)*crypto_box_PUBLICKEYBYTES];
}

那很简单。但是有了这个crypto_box(c,m,mlen,n,pk,sk)功能,我就混淆了填充,ZEROBYTES以及如何管理对象所有权。如何为crypto_box(c,m,mlen,n,pk,sk)和朋友构建一个简单的 Wrapper?

4

2 回答 2

0

一种选择是Sodium-Objc。这些绑定已经有一段时间没有更新了,但它们仍然非常好,并且crypto_box在 Objective-C 中使用起来非常容易。

另一种选择是Swift-Sodium,它更完整。它是用 Swift 编写的,但是从 Swift 调用 Objective-C 应该很容易。

但是如果你想走低级直接调用 C 函数,你实际上不必担心填充。只需使用简单的界面crypto_box_easy()crypto_box_open_easy()

crypto_box_easy()将身份验证器(crypto_box_MACBYTES字节长)紧跟在加密消息之后。不需要额外的填充。并crypto_box_open_easy()在不需要额外填充或移动字节的情况下解密消息。

于 2015-02-26T22:41:30.217 回答
-1

我在这个库中编写了crypto_secretbox,并按照文档中的定义进行了填充:https ://github.com/gabriel/NACL/blob/master/NACL/NASecretBox.m

如果 crypto_box 的填充设置相同,这可能会有所帮助。

于 2014-02-08T00:30:45.480 回答