【问题标题】:Encryption and signature creation加密和签名创建
【发布时间】:2012-08-14 10:40:47
【问题描述】:

我需要在Objective C中通过以下过程创建签名:

  1. ASCII 编码一个 NSString
  2. 使用 MD5 散列结果
  3. 对结果字节执行按位运算 (&127)
  4. 转换为 Base64 字符串

我不知道从哪里开始。我能够在 C# 中完成这项任务,但在 Objective C 甚至 ANSI C 中不知所措。

我已经使用以下方法从初始 NSString 获取 UTF8String:

[NSString UTF8String]

希望你能帮忙。

【问题讨论】:

  • 你为什么使用 ASCII?这不是无损转换。单独处理每个步骤,每个步骤都很容易搜索。
  • 这不是我的定义——它是由第三方提供的一组说明,我必须遵守。我可以处理第 2 点和第 4 点,但特别是第 1 点和第 3 点会引起我的问​​题

标签: iphone objective-c ios encryption md5


【解决方案1】:
  1. 阅读String Conversions
  2. 通过 H2CO3 下载 NSString MD5 Category
  3. 选择Base64 encoders

您提到您在字符串转换时遇到问题,这是您要转换为 ASCII 的:

NSString* src = @"";
NSData* data = [src dataUsingEncoding: NSASCIIStringEncoding allowLossyConversion: YES];
NSString* ascii = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];

执行按位运算有点复杂。您将希望在直接 C 中执行此操作,如下所示:

NSString* src = <MD5 hashed result>
NSMutableString* dst = [[NSMutableString alloc] initWithCapacity: src.length];
for(NSUInteger i=0;i<src.length;i++) {
    unichar c = [src characterAtIndex: i];
    [dst appendFormat: @"%d", (c & 127)];
}

//Base64 encode dst

如果需要,第 3 方应告诉您如何操作。

【讨论】:

  • 你说的很对——如果他们想要合规,他们应该有例子。非常感谢您花时间提供帮助。我现在就试试看。
猜你喜欢
  • 2012-11-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2015-09-08
相关资源
最近更新 更多