Мне нужно преобразовать этот кусок PHP-кода в swift для создания хэшей, я использую хеш-код в PHP для хеширования 2 строк с помощью SHA256, и я хотел бы сделать это быстро, есть идеи?
SELF :: SECRET является секретным ключом, а SELF :: HASH_PATTERN является моим шаблоном и выглядит примерно так: «00101010011100001010»
public function hash($first, $second) {
// Append the secret to the values.
$first = self::SECRET . $first;
$second = $second . self::SECRET;
// Hash the values.
$hash = hash_init('sha256');
hash_update($hash, $first);
$hash1 = hash_final($hash);
$hash = hash_init('sha256');
hash_update($hash, $second);
$hash2 = hash_final($hash);
// Create a new hash with pieces of the two we just made.
$result = '';
for ($i = 0; $i < strlen(self::HASH_PATTERN); $i++) {
$result .= substr(self::HASH_PATTERN, $i, 1) ? $hash2[$i] : $hash1[$i];
}
return $result;
}
Спасибо!
ОБНОВИТЬ:
Это та часть, которую я не могу понять:
$hash = hash_init('sha256');
hash_update($hash, $first);
$hash1 = hash_final($hash);
ОБНОВИТЬ:
После нескольких часов исследований и написания кода я наконец понял это.
Это код, который я написал, возможно, не самый лучший, но он работает 🙂
Я использовал небольшой класс из github для генерации строк SHA256 в swift под названием NSHash
func create_token(first:String, second:String) -> String {
var newFirst = constants.secret + first as NSString
var newSecond = second + constants.secret as NSString
var hash1 = newFirst.SHA256()
var hash2 = newSecond.SHA256()
var result = ""
for var i = 0; i < countElements(constants.hash_pattern); i++ {
var character = "\(constants.hash_pattern[i])" as String
var number:Int = character.toInt()!
if number == 1 {
result = "\(result)\(hash2[i])"
}else {
result = "\(result)\(hash1[i])"
}
}
return result
}
Задача ещё не решена.
Других решений пока нет …