在objective-c中,我们可以通过以下代码用md5加密字符串
const char *cStr = [someString UTF8String];
unsigned char result[16];
CC_MD5( cStr, strlen(cStr), result );
md5String = [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
Run Code Online (Sandbox Code Playgroud)
但是现在CC_MD5在swift中不起作用.如何处理这个问题.
我通过swift编写应用程序,我需要AES加密和解密功能,我从另一个.Net解决方案接收加密数据,但我找不到要做的事情.
这是我的.net加密:
public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
byte[] encryptedBytes = null;
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, …Run Code Online (Sandbox Code Playgroud) 我对Swift相对较新,而且我使用HMAC和SHA1进行加密.我找到了以下答案/sf/answers/1708806571/但我无法弄清楚如何正确实现这一点.任何帮助都会很棒.
我需要使用HMAC SHA256生成哈希.我在Java中使用以下代码.我需要Objective-C中的等效代码.
javax.crypto.Mac mac = javax.crypto.Mac.getInstance(type);
javax.crypto.spec.SecretKeySpec secret = new javax.crypto.spec.SecretKeySpec(key.getBytes(), type);
mac.init(secret);
byte[] digest = mac.doFinal(value.getBytes());
StringBuilder sb = new StringBuilder(digest.length * 2);
String s="";
for (byte b: digest) {
s = Integer.toHexString(b);
if (s.length() == 1) {
sb.append('0');
}
sb.append(s);
}
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
键= YARJSuwP5Oo6/r47LczzWjUx/T8ioAJpUK2YfdI/ZshlTUP8q4ujEVjC0seEUAAtS6YEE1Veghz+IDbNQb+2KQ==
价值=
id=456|time=19:10|nonce=8
输出=
4effffffd8ffffffce7cffffffc4ffffffc71b2f72ffffffdc21ffffffa1ffffffe0ffffffe62d32550b0771296bffffff9c1159ffffffdeffffff8675ffffff9928654c
Run Code Online (Sandbox Code Playgroud)
我有这个Objective-C功能:
//Hash method Definition
- (NSString *)getHashEncription:(NSString *)key andData:(NSString *)data{
NSLog(@"Secret Key %@ And Data %@", key, data);
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data …Run Code Online (Sandbox Code Playgroud) 我正在构建一个接收登录凭据(username和password)的应用程序。我想在将数据发送到服务器之前进行加密。如果有人能提供一些有关 Swift 中密码加密的最常见方法或最佳实践的见解,我将不胜感激。
我基本上是在尝试使用String并在php中执行以下操作:
$signature= base64_encode(hash_hmac('sha1', $data, $secretKey, true));
Run Code Online (Sandbox Code Playgroud)
但是,在Swift中进行操作 ...我看到很多关于其他人试图使用CommonCrypto进行操作的帖子,但是该模块似乎没有安装。
所以确实有3个问题:
我当前的代码如下所示:
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) 我正在尝试加密数据以发送到API.
API要求将数据作为hmac_sha512加密哈希发送.
我已经找到了各种各样的例子,说明它可能是如何为sha1其他人(而不是sha512)以及旧版本的Swift完成的.
我尝试过的所有例子都没有 swift 3.1
任何正确方向的帮助将不胜感激.
编辑:
在PHP中,我使用以下方法成功发送:
$sign = hash_hmac('sha512', $post_data, $this->secret);
Run Code Online (Sandbox Code Playgroud)
编辑2:
我did add briding header,我不知道下一步该做什么!由于之后的代码示例不适用于swift 3.1 :(
编辑3:
解决了!猜猜看,我正在错误地创建新的标题!:(
PS我试图避免使用CryptoSwift,专注于CommonCrypto.
下面给出的答案是不正确的,因为它不允许hmac获得加密密钥.我做了研究,终于搞定了.这篇文章包含了hmac的工作示例项目:https://github.com/nabtron/hmacTest
swift ×6
ios ×3
encryption ×2
hmac ×2
aes ×1
commoncrypto ×1
cryptoswift ×1
hash ×1
java ×1
md5 ×1
objective-c ×1
sha512 ×1
xcode ×1
xcode6 ×1