• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - RNCryptor:获取公钥作为 NSString

[复制链接]
菜鸟教程小白 发表于 2022-12-13 09:32:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

我正在尝试将公钥发送到服务器,以便它可以加密一些数据。

NSString *saltString = @"salt'n'peppa";
NSData *salt = [saltString dataUsingEncoding:NSUTF8StringEncoding];
NSData *key = [RNCryptor keyForPassword:password
                                   salt:salt
                               settings:kRNCryptorAES256Settings.keySettings];

此时,key里面有一些数据。但是,我似乎无法弄清楚如何将公钥作为字符串获取:

NSString *publicKey = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];

我尝试了不同的编码,但似乎没有任何效果。

这是来自 RNCryptor 的 keyForPassword 方法:

+ (NSData *)keyForPasswordNSString *)password saltNSData *)salt settingsRNCryptorKeyDerivationSettings)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;
}

我觉得我做错了什么,因为谷歌搜索的结果很少。



Best Answer-推荐答案


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

关于ios - RNCryptor:获取公钥作为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153768/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap