首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNCryptor:获取公钥作为NSString

RNCryptor:获取公钥作为NSString
EN

Stack Overflow用户
提问于 2014-10-02 02:43:55
回答 1查看 729关注 0票数 2

我正在使用iOS成功地使用RNCryptor加密/解密数据。

我试图将公钥发送到服务器,这样它就可以加密一些数据。

代码语言:javascript
复制
NSString *saltString = @"salt'n'peppa";
NSData *salt = [saltString dataUsingEncoding:NSUTF8StringEncoding];
NSData *key = [RNCryptor keyForPassword:password
                                   salt:salt
                               settings:kRNCryptorAES256Settings.keySettings];

此时,key中有一些数据。但是,我似乎想不出如何将公钥作为字符串:

代码语言:javascript
复制
NSString *publicKey = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];

我试过不同的编码方式,但似乎没有效果。

下面是来自keyForPassword的RNCryptor方法:

代码语言:javascript
复制
+ (NSData *)keyForPassword:(NSString *)password salt:(NSData *)salt settings:(RNCryptorKeyDerivationSettings)keySettings
{
  NSMutableData *derivedKey = [NSMutableData dataWithLength:keySettings.keySize];

  // See Issue #77. V2 incorrectly calculated key for multi-byte characters.
  NSData *passwordData;
  if (keySettings.hasV2Password) {
    passwordData = [NSData dataWithBytes:[password UTF8String] length:[password length]];
  }
  else {
    passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
  }

  // Use the built-in PBKDF2 if it's available. Otherwise, we have our own. Hello crazy function pointer.
  int result;
  int (*PBKDF)(CCPBKDFAlgorithm algorithm, const char *password, size_t passwordLen,
               const uint8_t *salt, size_t saltLen,
               CCPseudoRandomAlgorithm prf, uint rounds,
               uint8_t *derivedKey, size_t derivedKeyLen);

  PBKDF = CCKeyDerivationPBKDF ?: RN_CCKeyDerivationPBKDF;

  result = PBKDF(keySettings.PBKDFAlgorithm,         // algorithm
                 passwordData.bytes,                 // password
                 passwordData.length,                // passwordLength
                 salt.bytes,                         // salt
                 salt.length,                        // saltLen
                 keySettings.PRF,                    // PRF
                 keySettings.rounds,                 // rounds
                 derivedKey.mutableBytes,            // derivedKey
                 derivedKey.length);                 // derivedKeyLen

  // Do not log password here
  NSAssert(result == kCCSuccess, @"Unable to create AES key for password: %d", result);

  return derivedKey;
}

我有一种感觉,我做了一件很严重的错事,因为谷歌找不到什么东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 02:54:25

键不是字符串,而是数据。只是随机的(某种程度的)字节序列。将其转换为要发送到服务器的字符串的唯一真正方法是对字节进行编码。一种常见的方法是使用基64编码。然后,服务器可以将基64编码的字符串转换回密钥的原始字节。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26153768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档