在swift中实现HMAC和SHA1加密

2024-03-11

我对 Swift 比较陌生,并且一直坚持使用 HMAC 和 SHA1 进行加密。我找到了以下答案https://stackoverflow.com/a/24411522/4188344 https://stackoverflow.com/a/24411522/4188344但我不知道如何正确实施这一点。任何帮助都会很棒。


问题解决了!首先,我没有正确使用字符串函数......我最终得到了这个:

    let hmacResult:String = "myStringToHMAC".hmac(HMACAlgorithm.SHA1, key: "myKey")

然后我忘记了我需要对 hmac 结果进行 Base64 编码。所以我将问题中链接的字符串函数修改为......

enum HMACAlgorithm {
    case MD5, SHA1, SHA224, SHA256, SHA384, SHA512

    func toCCHmacAlgorithm() -> CCHmacAlgorithm {
        var result: Int = 0
        switch self {
        case .MD5:
            result = kCCHmacAlgMD5
        case .SHA1:
            result = kCCHmacAlgSHA1
        case .SHA224:
            result = kCCHmacAlgSHA224
        case .SHA256:
            result = kCCHmacAlgSHA256
        case .SHA384:
            result = kCCHmacAlgSHA384
        case .SHA512:
            result = kCCHmacAlgSHA512
        }
        return CCHmacAlgorithm(result)
    }

    func digestLength() -> Int {
        var result: CInt = 0
        switch self {
        case .MD5:
            result = CC_MD5_DIGEST_LENGTH
        case .SHA1:
            result = CC_SHA1_DIGEST_LENGTH
        case .SHA224:
            result = CC_SHA224_DIGEST_LENGTH
        case .SHA256:
            result = CC_SHA256_DIGEST_LENGTH
        case .SHA384:
            result = CC_SHA384_DIGEST_LENGTH
        case .SHA512:
            result = CC_SHA512_DIGEST_LENGTH
        }
        return Int(result)
    }
}

extension String {
    func hmac(algorithm: HMACAlgorithm, key: String) -> String {
        let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding)
        let cData = self.cStringUsingEncoding(NSUTF8StringEncoding)
        var result = [CUnsignedChar](count: Int(algorithm.digestLength()), repeatedValue: 0)
        CCHmac(algorithm.toCCHmacAlgorithm(), cKey!, strlen(cKey!), cData!, strlen(cData!), &result)
        var hmacData:NSData = NSData(bytes: result, length: (Int(algorithm.digestLength())))
        var hmacBase64 = hmacData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding76CharacterLineLength)
        return String(hmacBase64)
    }
}

这给了我正确的结果

lGCtbW+DNHFraNoxPGK3trgM/98=
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在swift中实现HMAC和SHA1加密 的相关文章

  • 如何在 Swift 语言中传递错误指针?

    我试图在 swift 中传递错误指针 但无法这样做 编译器抱怨 NSError 无法转换为 NSErrorPointer var error NSError NSError var results context executeFetchR
  • XCode 调试 - 我可以绕过反汇编代码的单步执行吗

    调试项目时 在 XCode 中设置断点后 我将开始单步执行代码 然后我会遇到反汇编代码 我认为这些代码是对没有可用源代码的各种框架的调用 这是一个正确的假设吗 有没有一种方法 可能通过我尚未找到的项目设置 来抑制此汇编代码的显示 而不必单步
  • 我无法捕获 WKWebView 的屏幕截图

    我正在尝试捕获 WKWebView 的屏幕截图 但我的方法无法正常工作 它返回纯色 就好像图层树为空一样 而它似乎适用于其他视图 UIImage screenshot UIImage screenshot UIGraphicsBeginIm
  • 访问iOS 7隐藏的UITableViewCellScrollView?

    苹果改变了UITableViewCelliOS 7 中的层次结构 使用iOS 6 1 SDK
  • 在两个数字之间设置 UILabel 文本动画?

    我是 iPhone 和 Mac 编程新手 之前为 Windows 开发过 我有一个问题 我如何制作动画text的财产UILabel两个数字之间 例如从5 to 80以 Ease Out 风格 是否可以与CoreAnimation 我已经在谷
  • 多个 ViewController(containerView?childView?viewController 的实例?)

    我需要在另一个视图之上添加一个新视图 带有 ViewController 用户与这个新视图交互了一段时间 然后我想将其删除 在旧版本的 Xcode 中 我可以将其添加为子视图 我现在收到 EXC BAD ACCESS 错误 我不希望添加的视
  • Xcode 9.0.1 应用程序分发程序已更改

    最近我将 Xcode 升级到了 Xcode 9 1 之后 当我尝试发布我的应用程序时 Xcode 不允许选择我为临时创建的分发配置文件 这么说 配置文件不是 IOS 应用商店配置文件 如果 Xcode 9 1 的应用程序分发过程有变化 请告
  • 以编程方式更改 UISlider 的范围

    如何以编程方式设置 UISlider 的最小最大范围 例如 虚拟代码 UISlider slider UISlider alloc init slider min 3 slider max 3 EDIT 所以我有以下内容 sl minimu
  • 除了使用正则表达式之外,在 Swift 中解析 HTML

    下面是我想在 Swift 中解析的 HTML 代码 td class pinyin a href rsc audio voice pinyin pz yi1 mp3 span class mpt1 y span a a href rsc a
  • Xcode UI 测试 - 通过 id 在 Webview 中查找元素

    我们的应用程序是混合的 包含 webview 我正在尝试使用 Xcode UI 测试自动化我们的应用程序 我能够使用以下方法找到网络按钮 let app XCUIApplication app launch let button app s
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • 以编程方式添加带有自动布局的 UISLider

    我正在尝试以编程方式将 UISlider 添加到我的视图中 包括约束 以便其宽度适应整个屏幕宽度 这是我到目前为止得到的 2 Add UISlider self slider UISlider alloc init self view ad
  • RxSwift、RxCocoa 和 UITableview

    我在使用 RxSwift 实现 UITableView 时遇到问题 我尝试使用以下代码将模型数组的可观察对象绑定到表项 models bind to self tableView rx items cellIdentifier Cell c
  • iOS 中的词干 - 不适用于单个单词

    我在用NSLinguisticTagger用于词干提取 我能够获得句子中单词的词干 但无法获得单个单词的词干 以下是我正在使用的代码 NSString stmnt i waited NSLinguisticTaggerOptions opt
  • ios - 使用 SIGPIPE 和 SIG_IGN 的信号函数

    我加入了一个旧项目 我发现了这条线 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptions si
  • 如何将代码 AVFoundation Objective C 转换为 Swift?

    我正在 swift 中使用 AVFoundation 来拍照 但我无法将任何 func 代码行从 Objective C 转换为 Swift 我的功能代码是 void capImage method to capture image fro
  • 如何在 iOS 5 中使用 Embed Segue?

    iOS 6 引入了 Embed Segue 允许在 Storyboard 中使用自定义容器控制器 有没有办法在 iOS 5 上复制这个 这里的挑战是子视图控制器的视图通常要添加为父视图控制器的某些容器视图的子视图 因为你不能随机进行序列UI
  • Sprite-kit:沿圆形路径移动元素

    我正在尝试让一个元素沿着圆圈的边缘移动 我在屏幕中间创建并放置了一个圆圈 var base SKShapeNode circleOfRadius 200 Size of Circle base position CGPointMake fr
  • iOS 上的本地通知需要用户许可吗?

    我在我的应用程序中使用 UILocalNotification 来安排通知 通知工作正常 并在我需要时显示 我对此没有意见 我没有做任何远程 推送通知 让我想知道的是 我从未见过您通常在多个应用程序中看到的推送通知的著名权限对话框 我什至重
  • 小部件配置在 macOS 上不起作用

    我为我的 iOS 应用程序制作了一个小部件 效果很好 现在我正在将其移植到我的 macOS 应用程序中 但不知何故 小部件配置不起作用 这些项目已显示 但我无法以某种方式选择它们 查看屏幕截图 但请看一下我制作的视频 https youtu

随机推荐

  • TDictionary 保存到文件

    我有很多文件 大约 160 000 个 我需要有关文件中各个单词的位置的信息 全文 所以我这样使用字典 WordDict TDictionary
  • 在 MVC 核心中搭建控制器时未找到主键

    当尝试搭建控制器时 出现以下错误 运行选定的代码生成器时出错 实体 类型 Company Models Office 需要在以下位置定义主键 Microsoft VisualStudio Web CodeGeneration ActionI
  • OpenGL 点精灵可以在 Android 中使用吗?

    我正在 Droid 版本 2 1 update1 上进行开发 我支持的 GL 扩展包括 GL OES point sprite 和 GL OES point size array 我无法获取要渲染的点精灵 下面的代码在 glTexEnvi
  • 控制器间通信,角度方式

    我试图找出控制器 指令之间共享属性或状态的 首选 或 角度方式 有多种方法可以实现这一点 但我想遵循最佳实践 下面是一些如何实现这一点的平庸示例 1 使用 scope watch The parent controller scope an
  • 更改所有字符串属性最大长度

    在 EF 6 中我可以这样做 modelBuilder Properties Where p gt p PropertyType typeof string p GetCustomAttributes typeof MaxLengthAtt
  • Base64 值不是有效图像

    对于电子商务 我需要从 SOAP Web 服务获取产品图像 Web 服务的图像以 base64 编码 在我这边 我必须解码它们以将它们保存在 WordPress 目录中 我的所有代码都有效 即使它远非完美 唯一的问题是我无法从下面的 SOA
  • 为什么这个 Angular 应用程序无法处理用户状态(登录\退出),从而在用户登录后更改显示内容?

    我正在使用 AngularUI Angular 包 这个 https www npmjs com package firebaseui angular https www npmjs com package firebaseui angul
  • Bootstrap 4 动画列宽变化

    我有两列这样的 div class container div class row div class col 9 div div class col 3 div div div 我通过 Angular 将类名切换为col 8 offset
  • 在 Eclipse 中构建 Makefile 项目的步骤

    我正在尝试使用 Eclipse 构建一些现有软件 用 C 编写 它是使用 Makefile 构建的 为此 我在 Eclipse 中创建了一个 Makefile 项目 然而 我刚刚发现 在 C C 构建 设置 菜单中 我只看到 二进制解析器
  • 如何从 Windows 环境将 Xcode 项目添加到 Github 存储库

    看到我的问题标题后 您可能会认为以前已经问过此类问题 然而这并不重复 请阅读下面的内容来了解 我正在开发IOS应用程序 每当我有时间的时候 我都会使用图书馆的 PC 或朋友的 MacBook 来开发或更改现有项目 然后压缩该项目并将其上传到
  • 当没有数据可读取时,Socket read() 会挂起一段时间

    你好 我正在编写一个简单的 http 端口转发器 我从端口 80 读取数据 并将数据传递到端口 8080 上的 lighttpd 服务器 只要我在端口 8080 上的套接字上 write 数据 转发请求 就没有问题 但是当我从该套接字读取
  • 显示带有数据帧中的值的标签堆叠条形图

    如何显示来自数据框的堆积条形图的值 如何将标签放置在每个栏上各自部分的上方并修改字体 以便它显示为灰度图形 是有关系的对于这个问题 https stackoverflow com questions 30228069 how to disp
  • 用户注册后Django自动登录(1.4)

    我在成功注册用户时遇到问题 但是 我希望用户在注册时登录 这是代表我的注册视图的代码 关于用户不自动登录的原因有什么想法吗 Notes 用户已正确注册 之后即可登录 authenticate kwargs 返回正确的用户 在 setting
  • 即使对于简单实体,ProtoBuf 序列化也会丢失数据

    更新 1 我已将修改和修复的 演示 项目上传到https github com sidshetye SerializersCompare https github com sidshetye SerializersCompare其他人是否有
  • 如何有条件地停止 JavaScript 生成器?

    使用如下所示的迭代器 function idMaker let index 0 while index lt 3 yield index 如何确保根据情况提前停止发电机 function idMaker let index 0 while
  • Firebase 云函数错误代码和错误消息在 Android 上始终为内部

    我正在为我的应用程序开发一项功能 其中一个用户可以使用云功能向另一个用户发送通知 我的函数和通知按预期工作 但我无法以正确的方式处理错误 因为我的 Android 代码上总是出现 INTERNAL 错误 这是我的 Android 代码 pu
  • 如何获取 autoconf configure.ac 中顶级构建目录的绝对路径?

    我正在开发一个项目 该项目需要一个具有自己的 makefile 和 configure ac 的子项目 子项目是用于为主项目生成源文件的程序 有一个选项可以禁用该项目的构建并尝试使用已安装的版本 无论哪种情况 我都会创建一个在 Makefi
  • 监控显卡使用情况[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 当我运行某个应用程序时 如何监控显卡的使用情况 我想查看我的应用程序使用 GPU 的情况 如果您在 Visual Studio 201
  • 有效的 Java 第 11 条:明智地覆盖克隆

    对于具有数组字段的类 乔什说 如果克隆方法仅返回 super clone 则生成的类实例将在原始字段中具有正确的值 但其数组字段将引用与原始类实例相同的数组 修改原始内容将破坏不变量 反之亦然 他使用了自定义 Stack 实现的示例 我使用
  • 在swift中实现HMAC和SHA1加密

    我对 Swift 比较陌生 并且一直坚持使用 HMAC 和 SHA1 进行加密 我找到了以下答案https stackoverflow com a 24411522 4188344 https stackoverflow com a 244