Swift SHA1 功能无需 HMAC
Swift SHA1 function without HMAC
我尝试让 SHA1 在 swift 中工作。不使用 CommonCrypto,因为它在 swift 中不是默认的。
请参阅 https://gist.github.com/wdg/f7c8c4088030c59f0f45(因为发布有点大)
如果我在 Xcode 中运行测试用例:
func test_sha1() {
XCTAssertEqual(sha1("test"), "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3")
}
它将失败,并返回2d891cc96e32c32e8d26704d101208b954f435a5
我得到了哈希
:$ php -r "echo sha1('test');echo(PHP_EOL);"
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
我认为问题是在 JavaScript 文件中他们使用 >>>
我不知道这个运算符是什么。所以我用了>>
.
我希望有人能帮忙。
提前致谢
使用Common Crypto有几个原因:1.这是正确的。2. 它通过了 FIPS 140-2 认证。3. 它比基于代码的 Swift 实现快 1000 倍以上。
注意:通用加密使用硬件加密引擎。
只需添加一个包含的桥接标头:
#import <CommonCrypto/CommonCrypto.h>
SHA256 的示例代码(不应再使用 SHA1):
func sha256(dataIn dataIn:NSData) -> NSData {
let digest: NSMutableData! = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH));
CC_SHA256(dataIn.bytes, CC_LONG(dataIn.length), UnsafeMutablePointer<UInt8>(digest.mutableBytes));
return digest;
}
或
func sha1(dataIn dataIn:NSData) -> NSData {
let digest: NSMutableData! = NSMutableData(length: Int(CC_SHA1_DIGEST_LENGTH));
CC_SHA1(dataIn.bytes, CC_LONG(dataIn.length), UnsafeMutablePointer<UInt8>(digest.mutableBytes));
return digest;
}
或
func sha1(string string: String) -> [UInt8] {
var digest = [UInt8](count: Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)
if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
CC_SHA1(data.bytes, CC_LONG(data.length), &digest)
}
return digest
}
我有一个解决方案,旋转功能有问题。
我已将旋转功能更改为
func rotate(n: Int, _ s: Int) -> Int {
return ((n << s) & 0xFFFFFFFF) | (n >> (32 - s))
}
现在它起作用了。
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- Swift SHA1 功能无需 HMAC