在objective-c中它看起来像这样:
#include <sys/xattr.h>
@implementation NSString (reverse)
-(NSString*)sha1
{
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (int)data.length, digest);
NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
@end
Run Code Online (Sandbox Code Playgroud)
我需要Swift这样的东西,有可能吗?
请展示工作示例.
我得到了在Objective-C中将String转换为HEX-String的代码.
- (NSString *) CreateDataWithHexString:(NSString*)inputString
{
NSUInteger inLength = [inputString length];
unichar *inCharacters = alloca(sizeof(unichar) * inLength);
[inputString getCharacters:inCharacters range:NSMakeRange(0, inLength)];
UInt8 *outBytes = malloc(sizeof(UInt8) * ((inLength / 2) + 1));
NSInteger i, o = 0;
UInt8 outByte = 0;
for (i = 0; i < inLength; i++) {
UInt8 c = inCharacters[i];
SInt8 value = -1;
if (c >= '0' && c <= '9') value = (c - '0');
else if (c >= 'A' && c <= 'F') value …Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串转换为数据类型.我认为这就是我所需要的但是如果我尝试打印它只打印"12字节"
let tString = "Hello World!"
if let newData = tString.data(using: String.Encoding.utf8){
print(newData)
self.peripheral?.writeValue(newData, for: positionCharacteristic, type: CBCharacteristicWriteType.withResponse)
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我对Swift很新.
我想为我的教育应用程序在Swift上创建类似API的东西.
我有这个代码:
static func getFilm(filmID: Int) -> String {
print("getFilm")
let url = URL(string: "https://api.kinopoisk.cf/getFilm?filmID=\(filmID)")!
var request = URLRequest(url: url)
var returnData: String = ""
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if var responseVar = response, var dataVar = data {
print(responseVar)
returnData = String(data: dataVar, encoding: .utf8)
} else {
print(error)
}
}
task.resume()
return returnData
}
Run Code Online (Sandbox Code Playgroud)
我尝试在此行中将数据转换为字符串: returnData = String(data: dataVar, encoding: .utf8)
Swift编译器给我一个错误,并将此行更改为
returnData = String(data: dataVar, encoding: .utf8)!
,当我执行此行时,我得到空的returnData变量.
如果我使用基本的示例行,
print(String(data: …
我要做的就是取一个字符串并获取其十六进制值.我一直关注这篇文章.这是我在操场上的代码:
let str = "Say Hello to My Little Friend"
let data = str.data(using: String.Encoding.utf16)
print("\(data!)")
Run Code Online (Sandbox Code Playgroud)
但是,我的代码只打印:
"60字节\n"
如何打印十六进制值?供参考,它应该是:
5361792048656c6c6f20746f204d79204c6974746c6520467269656e64
Run Code Online (Sandbox Code Playgroud) 我试图在Swift 3(和/或目标C)中散列一个String ripemd160来模拟以下php的输出:
$string = 'string';
$key = 'test';
hash_hmac('ripemd160', $string, $key);
// outputs: 37241f2513c60ae4d9b3b8d0d30517445f451fa5
Run Code Online (Sandbox Code Playgroud)
至今:
我已经尝试过查找hash_hmac我能找到的功能,例如:
在swift中实现HMAC和SHA1加密
enum HMACAlgorithm {
case MD5, SHA1, SHA224, SHA256, SHA384, SHA512, RIPEMD160
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
case .RIPEMD160:
result = kCCHmacAlgRIPEMD160 …Run Code Online (Sandbox Code Playgroud) Incase android 一切正常。我也想在 iOS 中实现相同的功能,但得到不同的值。请检查下面的图片描述。
在 Java/Android 案例中:
我试图将字符串转换为base64字节数组中的Java一样
byte[] data1 = Base64.decode(balance, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)
在 Swift3/iOS 案例中:
我试图将字符串转换为swift 中的base64 字节数组,例如
let data:Data = Data(base64Encoded: balance, options: NSData.Base64DecodingOptions(rawValue: 0))!
let data1:Array = (data.bytes)
Run Code Online (Sandbox Code Playgroud)
使用 XCode 11,我无法再查看推送令牌的完整价值。下面是一些示例代码来说明:
func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType)
{
var method1 = NSString(format: "%@", credentials.token as CVarArg) as String
print("method1: \(method1)")
method1 = method1.replacingOccurrences(of: " ", with: "")
method1 = method1.replacingOccurrences(of: "<", with: "")
method1 = method1.replacingOccurrences(of: ">", with: "")
print("method1 again: \(method1)")
let method2 = String(decoding: credentials.token, as: UTF8.self)
print("method2: \(String(describing: method2))")
let method3 = credentials.token.description as String
print("method3: \(method3)")
Run Code Online (Sandbox Code Playgroud)
但是,当使用 Xcode 11 运行上述代码时,输出如下:
method1: {length = 32, bytes = 0x5b3f44e0 6d2c5ee5 5252d3db f5bb915b …Run Code Online (Sandbox Code Playgroud) 鉴于以下情况HashedAuthenticationCode:
import CryptoKit
let key = SymmetricKey(size: .bits256)
let message = "Hello world!".data(using: .utf8)!
let authenticationCode = HMAC<SHA256>.authenticationCode(for: message, using: key)
print(authenticationCode) // "HMAC with SHA256: c818a1400a9995d5faafbb5d41cc88a6701b5d1a4ded8ac169498319a2597e2a"
Run Code Online (Sandbox Code Playgroud)
我如何访问该c818a1400a9995d5faafbb5d41cc88a6701b5d1a4ded8ac169498319a2597e2a值?最终,这必须通过 a 进行编码和序列化URLSession,但我看不到获取 HAC 的“代码”部分的明显属性!
Python有两个非常有用的库方法(binascii.a2b_hex(keyStr)和binascii.hexlify(keyBytes)),我一直在Swift中苦苦挣扎.Swift中有什么随处可用的吗?如果没有,将如何实现它?给定所有边界和其他检查(如偶数长度键).