相关疑难解决方法(0)

如何在swift中将数据转换为十六进制字符串

我想要在Swift中使用数据值的十六进制表示.

最终我想要像这样使用它:

let data = Data(base64Encoded: "aGVsbG8gd29ybGQ=")!
print(data.hexString)
Run Code Online (Sandbox Code Playgroud)

swift swift3

62
推荐指数
6
解决办法
4万
查看次数

如何将NSData转换为NSString十六进制字符串?

当我调用-description一个NSData对象时,我看到一个NSData对象字节的十六进制字符串,如:

<f6e7cd28 0fc5b5d4 88f8394b af216506 bc1bba86 4d5b483d>
Run Code Online (Sandbox Code Playgroud)

我希望将数据的这种表示(减去lt/gt引号)放入内存中,NSString这样我就可以使用它.我不想调用-[NSData description]然后只修剪lt/gt引号(因为我认为这不是NSData公共界面的保证方面,并且将来会发生变化.

NSData对象表示为NSString对象(除了调用之外-description)的最简单方法是什么?

macos cocoa

53
推荐指数
5
解决办法
4万
查看次数

Swift 5.0:不推荐使用'withUnsafeBytes':使用`withUnsafeBytes &lt;R&gt;(...)

我以前在Swift 4.2中使用以下代码来生成ID:

public static func generateId() throws -> UInt32 {
    let data: Data = try random(bytes: 4)
    let value: UInt32 = data.withUnsafeBytes { $0.pointee } // deprecated warning!
    return value // + some other stuff 
}
Run Code Online (Sandbox Code Playgroud)

withUnsafeBytes在Swift 5.0上已弃用。我该如何解决?

unsafe-pointers deprecated swift

35
推荐指数
3
解决办法
8882
查看次数

什么是hh和h格式说明符的需要?

使用hhx而不是x有什么用,在下面的代码中,mac_str是char指针macuint8_t数组,

 sscanf(mac_str,"%x:%x:%x:%x:%x:%x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);
Run Code Online (Sandbox Code Playgroud)

当我尝试上面的代码时它发出警告,

warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 8 has type ‘uint8_t *’ [-Wformat]
Run Code Online (Sandbox Code Playgroud)

但我在他们指定的一些代码中看到了

sscanf(str,"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);
Run Code Online (Sandbox Code Playgroud)

哪个不给任何警告

但两者都是一样的,使用hhx而不是x的需要是什么,我在网上搜索但没有直接回答

c scanf format-specifiers

8
推荐指数
2
解决办法
6813
查看次数

如何在Swift中将字符串哈希到SHA512?

我正在构建一个社交媒体应用程序,我想帮助在Swift中将密码字符串编码为SHA512.我在GitHub上找到了CryptoSwift库,但我很难将它加载到我的Swift项目中并将其链接到我的项目文件.有谁知道如何相对容易地完成这个?先谢谢你,凯尔

sha512 swift cryptoswift

7
推荐指数
2
解决办法
6868
查看次数

在swift 5中更新代码以避免使用UnsafeMutableBytes弃用警告时发生错误

我已更新为swift 5,并且我使用的依赖项之一不会在swift 5中编译。我已修复它,但现在我在整个文件中收到350多个弃用警告。它们都与此类似:

withUnsafeMutableBytes不推荐使用:withUnsafeMutableBytes<R>(_: (UnsafeMutableRawBufferPointer) throws -> R) rethrows -> R改用

这是代码的伪装(基本上只是调用ac库的函数):

var k = Data(count: crypto_generichash_keybytes())
k.withUnsafeMutableBytes { kPtr in
    flutter_sodium.crypto_generichash_keygen(kPtr)
}
Run Code Online (Sandbox Code Playgroud)

作为参考,在上面的crypto_generichash_keybytes()中仅返回一个size_t,其crypto_generichash_keygen签名为void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]);

我发现(如该答案所述)解决该问题的方法应该是调用kPtr.baseAddress:

var k = Data(count: crypto_generichash_keybytes())
k.withUnsafeMutableBytes { kPtr in
    flutter_sodium.crypto_generichash_keygen(kPtr.baseAddress)
}
Run Code Online (Sandbox Code Playgroud)

因为那应该使用withUnsafeMutableBytes<ResultType>变量而不是不推荐使用withUnsafeMutableBytes<ResultType, ContentType>。但是,这会导致错误

类型'UnsafeMutablePointer <_>'的值没有成员'baseAddress'。

如果我明确指定resultType和kPtr:

var k = Data(count: crypto_generichash_keybytes())
k.withUnsafeMutableBytes { (kPtr: UnsafeMutableRawBufferPointer) -> Void in
    flutter_sodium.crypto_generichash_keygen(kPtr.baseAddress)
}
Run Code Online (Sandbox Code Playgroud)

我反而得到

UnsafeMutableRawBufferPointer'不可转换为'UnsafeMutablePointer <_>'。

有没有敏捷的专家可以帮助我找到正确的方法来做到这一点?我知道警告只是警告,但是我更喜欢编译没有警告的代码。

我看了一下Swift 5.0:不赞成使用'withUnsafeBytes':在发布此问题之前使用`withUnsafeBytes …

swift

6
推荐指数
1
解决办法
1409
查看次数

如何快速进行HMAC-SHA1

我基本上是在尝试使用String并在php中执行以下操作:

    $signature= base64_encode(hash_hmac('sha1', $data, $secretKey, true));
Run Code Online (Sandbox Code Playgroud)

但是,在Swift中进行操作 ...我看到很多关于其他人试图使用CommonCrypto进行操作的帖子,但是该模块似乎没有安装。

所以确实有3个问题:

  1. CommonCrypto是执行此操作的正确方法吗?
  2. 如果是这样,如何添加框架?
  3. 如果不是CommonCrypto最好的方法,那是什么?

我当前的代码如下所示:

    var authString:String = "PUT\nTEST=BLAH\nTEST2=BLAHBLAHBLAH"
    let hmacResult:String = authString.sha1()

    ...

    extension String {
        func sha1() -> String {
          //Do Something...
        }
    }
Run Code Online (Sandbox Code Playgroud)

swift

5
推荐指数
1
解决办法
1293
查看次数

使用CCHmac()生成HMAC swift sdk8.3

在SDK8.3之前我用这种方式生成了我的hmac.现在我在CCHmac()函数上出错了.由于我是初学者,我无法弄清楚如何解决它.在此先感谢您的帮助!

xcode警告:不能用类型的参数列表(UInt32,[CChar] ?, UInt,[CChar] ?, UInt,inout [(CUnsignedChar)]来'CCHmac'

func generateHMAC(key: String, data: String) -> String {

    let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding)
    let cData = data.cStringUsingEncoding(NSUTF8StringEncoding)

    var result = [CUnsignedChar](count: Int(CC_SHA512_DIGEST_LENGTH), repeatedValue: 0)
    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA512), cKey, strlen(cKey!), cData, strlen(cData!), &result)


    let hash = NSMutableString()
    for var i = 0; i < result.count; i++ {
        hash.appendFormat("%02hhx", result[i])
    }

    return hash as String
}
Run Code Online (Sandbox Code Playgroud)

ios swift

4
推荐指数
1
解决办法
1822
查看次数

快速声明无符号字符数组

我以前在obj-c中所做的事情:

unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
Run Code Online (Sandbox Code Playgroud)

我在swift中尝试过的东西在Swift中发现了unsigned char

let cHMAC = [CUnsignedChar](count: CC_SHA1_DIGEST_LENGTH)
Run Code Online (Sandbox Code Playgroud)

但是,这不会建立,因为调用中需要额外的参数

有什么想法可以快速翻译第一个代码吗?

objective-c ios swift

2
推荐指数
1
解决办法
3129
查看次数

Sha 256在swift 3.0中加密语法错误

    func SHA256() -> String {

    let data = self.data(using: String.Encoding.utf8)
    let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))
    CC_SHA256((data! as NSData).bytes, CC_LONG(data!.count), UnsafeMutablePointer(res!.mutableBytes))
    let hashedString = "\(res!)".replacingOccurrences(of: "", with: "").replacingOccurrences(of: " ", with: "")
    let badchar: CharacterSet = CharacterSet(charactersIn: "\"<\",\">\"")
    let cleanedstring: String = (hashedString.components(separatedBy: badchar) as NSArray).componentsJoined(by: "")
    return cleanedstring

}
Run Code Online (Sandbox Code Playgroud)

我正在使用此函数来加密它在swift 2中工作正常的字符串,现在它不能在swift 3.0中工作在此输入图像描述

xcode ios swift3

2
推荐指数
2
解决办法
4770
查看次数

Swift 3:将字符串编码为UTF-16LE

我需要将字符串编码为UTF-16LE(稍后转换为sha1),但我遇到了一些问题.这是我试过的:

let utf16array = Array("password".utf16)
print(utf16array)
// [112, 97, 115, 115, 119, 111, 114, 100]
Run Code Online (Sandbox Code Playgroud)

但这正是我所期待的:

// [112, 0, 97, 0, 115, 0, 115, 0, 119, 0, 111, 0, 114, 0, 100, 0] 
Run Code Online (Sandbox Code Playgroud)

使用utf8array也一样:

let utf8array = "password".utf8.map({ $0 as UInt8 })
// [112, 97, 115, 115, 119, 111, 114, 100]
Run Code Online (Sandbox Code Playgroud)

所以,这就是我所做的"修复"它:

var bytesArray:[UInt16] = []
for byte in utf16array {
    bytesArray.append(byte)
    bytesArray.append(0)
}
print(bytesArray)
// [112, 0, 97, 0, 115, 0, 115, 0, 119, 0, 111, 0, 114, 0, …
Run Code Online (Sandbox Code Playgroud)

utf-8 utf-16le swift

0
推荐指数
1
解决办法
961
查看次数

如何使用秘密密钥在swift 4中哈希sha256?

我目前正在开发一个项目(速度为3/4),在该项目中,我需要哈希格式如下的HTTP请求:

    {"request": {"method": "getMyPeople", 
    "params": {"api_key": 00de5089d590e413807343166da22a45,
    "user_id": 8 }, "id": "1"}}
Run Code Online (Sandbox Code Playgroud)

我试图散列SHA-256用密钥,一些看起来是这样的:

    6b107c7ebebf056e1c45924d0546d35e
Run Code Online (Sandbox Code Playgroud)

我需要的:

  1. 我需要能够散列用密钥SHA256。
  2. 我需要一个散列请求是十六进制形式的字符串为了让我对数据库的请求

是)我有的:

  1. 设置我的头桥文件以使用Objective-C代码
  2. 调查了许多解决方案,但没有一个对我有用

我尝试过的解决方案: 我最近的尝试是Zaph的帖子(/sf/answers/2747494431/)。

当我的问题时: 我的问题似乎发生时,我尝试的形式转化

 hashSHA256: <aabc766b 6b357564 e41f4f91 2d494bcc bfa16924 b574abbd ba9e3e9d a0c8920a>
Run Code Online (Sandbox Code Playgroud)

在Zaph的帖子看到,他们把它以这种形式,我需要它在十六进制字符串的形式。

如果有人需要进一步澄清,请告诉我。预先感谢您的帮助!

hash sha256 swift

0
推荐指数
1
解决办法
5039
查看次数