关键词:
我正在构建一个社交媒体应用程序,我想帮助在Swift中将密码字符串编码为SHA512。我在GitHub上找到了CryptoSwift库,但我很难将它加载到我的Swift项目中并将其链接到我的项目文件。有谁知道如何相对容易地完成这个?先谢谢你,凯尔
Swift 3的解决方案:
extension String
func sha512() -> String
let data = self.data(using: .utf8)!
var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
data.withUnsafeBytes(
_ = CC_SHA512($0, CC_LONG(data.count), &digest)
)
return digest.map( String(format: "%02hhx", $0) ).joined(separator: "")
我发现所有的答案都可以,但如果我们应该有一个真正的通用解决方案,我认为我们需要提升一个级别。
CC_LONG
只是一个UInt32
,不会支持真正的大型数据结构。
这是我在Swift 3中的解决方案:
首先,我们创建一个基础:
struct Sha512
let context = UnsafeMutablePointer<CC_SHA512_CTX>.allocate(capacity:1)
init()
CC_SHA512_Init(context)
func update(data: Data)
data.withUnsafeBytes (bytes: UnsafePointer<Int8>) -> Void in
let end = bytes.advanced(by: data.count)
for f in sequence(first: bytes, next: $0.advanced(by: Int(CC_LONG.max)) ).prefix(while: (current) -> Bool in current < end)
_ = CC_SHA512_Update(context, f, CC_LONG(Swift.min(f.distance(to: end), Int(CC_LONG.max))))
func final() -> Data
var digest = [UInt8](repeating: 0, count:Int(CC_SHA512_DIGEST_LENGTH))
CC_SHA512_Final(&digest, context)
return Data(bytes: digest)
为方便起见,我们为Data
做了一个扩展:
extension Data
func sha512() -> Data
let s = Sha512()
s.update(data: self)
return s.final()
最后是String
的扩展:
extension String
func sha512() -> Data
return self.data(using: .utf8)!.sha512()
该解决方案可用于Sha256,MD5等,以获得Apple的CommonCrypto的真正通用解决方案。
斯威夫特3
func sha512() -> String
let data = self.data(using: .utf8)!
var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
data.withUnsafeBytes(
_ = CC_SHA512($0, CC_LONG(data.count), &digest)
)
return digest.map( String(format: "%02hhx", $0) ).joined(separator: "")
斯威夫特2.3
func sha512() -> String
let data = self.dataUsingEncoding(NSUTF8StringEncoding)!
var digest = [UInt8](count:Int(CC_SHA512_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA512(data.bytes, CC_LONG(data.length), &digest)
let hexBytes = digest.map String(format: "%02hhx", $0)
return hexBytes.joinWithSeparator("")
您需要导入C库CommonCrypto。您不能只将CommonCrypto导入swift文件,因为它不是一个独立的模块。
如果你有一个桥接头文件,你很幸运!只需将其添加到该文件即可
#import <CommonCrypto/CommonCrypto.h>
There are some articles about different ways to do that.
然后你可以使用这段代码让sha512可用于你选择的任何字符串。
迅速5
extension String
public var sha512: String
let data = self.data(using: .utf8) ?? Data()
var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
data.withUnsafeBytes
_ = CC_SHA512($0.baseAddress, CC_LONG(data.count), &digest)
return digest.map( String(format: "%02hhx", $0) ).joined(separator: "")
如何在 Java 中使用 SHA-512 对密码进行哈希处理?
...时间】:2016-01-1004:33:42【问题描述】:我一直在研究Java字符串加密技术,不幸的是我没有找到任何好的教程,如何在Java中使用SHA-512对字符串进行哈希处理;我阅读了一些关于MD5和Base64的博客,但它们并没有我想的那么安全(实... 查看详情
如何有效地比较两个 SHA512Managed 哈希值
...-06-2505:19:24【问题描述】:我使用SHA512Managed类对用户密码字符串进行编码。我最初按以下方式创建了标准具字符串:将密码字符串(例如“Johnson_#1”)转换为字节数组;使用SHA512Managed.ComputeHash获 查看详情
如何在 .NET 6 中正确计算 sha 512 哈希
】如何在.NET6中正确计算sha512哈希【英文标题】:Howtocalculatesha512hashproperlyin.NET6【发布时间】:2021-11-2510:34:59【问题描述】:在来自HowcanISHA512astringinC#?的.NET6代码中vardata=Encoding.UTF8.GetBytes("key");byte[]hash;using(SHA512shaM=newSHA512Managed( 查看详情
如何使用 OpenSSL 计算 SHA512/224 和 SHA512/256 哈希?
】如何使用OpenSSL计算SHA512/224和SHA512/256哈希?【英文标题】:HowtocalculateSHA512/224andSHA512/256hashesusingOpenSSL?【发布时间】:2018-06-0714:23:05【问题描述】:这是我在C中计算SHA512哈希的方法。#include<openssl/sha.h>#include<stdio.h>char*... 查看详情
如何使用 SecureString 创建 SHA1 或 SHA512 哈希?
】如何使用SecureString创建SHA1或SHA512哈希?【英文标题】:HowdoauseaSecureStringtocreateaSHA1orSHA512Hash?【发布时间】:2010-12-0412:13:12【问题描述】:我想在VB.NET中使用SecureString变量并将其转换为SHA1或SHA512哈希。如何安全地将SecureString转... 查看详情
使用 SHA512 的哈希字符串的长度是多少?
】使用SHA512的哈希字符串的长度是多少?【英文标题】:WhatisthelengthofahashedstringwithSHA512?【发布时间】:2013-08-1615:55:48【问题描述】:用sha512散列的字符串的长度总是一样吗?如果有,那是什么?【问题讨论】:crypto.stackexchange.c... 查看详情
我在哪里可以找到 Spring Boot 包的 SHA256/SHA512 哈希?
】我在哪里可以找到SpringBoot包的SHA256/SHA512哈希?【英文标题】:WherecanIfindSHA256/SHA512hashesforSpringBootpackages?【发布时间】:2021-05-2904:44:15【问题描述】:我正在尝试通过利用其dependencyverification功能来提高我的Gradle项目的安全性。... 查看详情
在 Perl 中创建 glibc 2.7 样式的 Sha-512 加密哈希
】在Perl中创建glibc2.7样式的Sha-512加密哈希【英文标题】:Creatingglibc2.7styleSha-512crypthashesinPerl【发布时间】:2012-06-1613:19:51【问题描述】:所以,我有一个网站,可以从数据库中读取/验证(和写入)密码哈希,并且我有一些东西... 查看详情
密码哈希:PBKDF2(使用 sha512 x 1000)与 Bcrypt
】密码哈希:PBKDF2(使用sha512x1000)与Bcrypt【英文标题】:PasswordHashing:PBKDF2(usingsha512x1000)vsBcrypt【发布时间】:2011-05-2421:50:09【问题描述】:我一直在阅读有关Gawker事件的文章,并且出现了几篇关于仅使用bcrypt来散列密码的文章... 查看详情
如何在带有 sha512 的 freeBSD 上使用 crypt()?
】如何在带有sha512的freeBSD上使用crypt()?【英文标题】:Howtousecrypt()onfreeBSDwithsha512?【发布时间】:2013-12-3112:14:22【问题描述】:目前我的代码如下所示:if(iInit==1)if(crypt_set_format("sha512")==0)return-1;iInit=!iInit;res=crypt(szPWhash,"ABCDEFGH");... 查看详情
使用 SHA512 对密码进行哈希处理以加密数据
】使用SHA512对密码进行哈希处理以加密数据【英文标题】:UseSHA512tohashapasswordtoencryptdata【发布时间】:2019-04-2108:04:19【问题描述】:我有一个C#应用程序,有时我必须在其中加密一些数据(XML文件)。基本上,问题是我不能在服... 查看详情
Swift 3:将 SHA256 哈希字符串转换为 SecCertificate
】Swift3:将SHA256哈希字符串转换为SecCertificate【英文标题】:Swift3:ConvertSHA256hashstringtoSecCertificate【发布时间】:2017-01-0900:35:15【问题描述】:Alamofire允许使用证书和公钥进行固定(尽管从包中获取公钥的函数从包中的证书中获取... 查看详情
SHA512 算法的哈希值是 128 位长吗?
】SHA512算法的哈希值是128位长吗?【英文标题】:HashvaluefromSHA512algorithmis128bitslong?【发布时间】:2013-02-2215:04:43【问题描述】:我有一个奇怪的问题。在我的代码中,我创建了一个sha512哈希算法并用它签署了一些数据。现在我希... 查看详情
如何在 Swift 中将字符串数组保存到 Core Data
】如何在Swift中将字符串数组保存到CoreData【英文标题】:HowtosaveStringArraytoCoreDatainSwift【发布时间】:2017-07-1309:50:13【问题描述】:我需要将我的字符串数组保存到CoreData。letstringArray:[String]=["FirstString","SecondString","ThirdString"]我有... 查看详情
python使用这一个函数在python中运行sha512哈希文本。为什么sha512?为什么在做这件事的整个过程中你会做得更少(代码片段)
如何在 Android 中计算字符串的 SHA-256 哈希?
】如何在Android中计算字符串的SHA-256哈希?【英文标题】:HowcanIcalculatetheSHA-256hashofastringinAndroid?【发布时间】:2011-11-0205:27:46【问题描述】:我正在尝试在Android中获取字符串的SHA256。这是我要匹配的PHP代码:echobin2hex(mhash(MHASH_SH... 查看详情
网络安全——base64编码md5sha1-sha512hmac(sha1-sha512)哈希
阅读目录一、Base64编码二、MD5、SHA1、SHA256、SHA512、HMAC实现github代码下载地址据说今天520是个好日子,为什么我想起的是502、500、404这些?还好服务器没事!一、Base64编码Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(... 查看详情
C# - 是不是可以使用 RSA SHA512 对哈希进行签名?
】C#-是不是可以使用RSASHA512对哈希进行签名?【英文标题】:C#-IsitpossibletoSignhashusingRSASHA512?C#-是否可以使用RSASHA512对哈希进行签名?【发布时间】:2016-09-2520:00:39【问题描述】:我使用OpenSSL创建了一个自签名证书,如下所示:o... 查看详情