2016-10-31 5 views
-1

Я хочу создать связи с банками, и, как я вижу в документации по cardlink, они хотят рассчитать дайджест.Как рассчитать дайджест

Основная идея этого вычисления это

Digest=base64(sha-1(utf8bytes(value1|value2|...|secret))) 

.

MessageDigestmdigest = MessageDigest.getInstance("SHA-1"); 
byte[] digestResult =digest.digest(concatString.getBytes("UTF-8")); 
String calculatedDigest = Base64.encode(digestResult); 

Это код, который у них есть для java.

Я начал проверять это вручную, но я придерживался конвертации байтов.

this is the finall step for base64

this is for sha-1

Так что мой главный вопрос заключается в том, как я могу сделать преобразование в байты и если это помогло бы много, если кто-то знает способ сделать это с быстрыми (СВН).

Заранее спасибо

EDIT

Это пример строки я получил:

2.045020311114033331503343429780020454510MDAwMDAwMDAwMDAwMDA2ODkzOTI=https://myeshop.gr/orders/Payment_Okhttps://myeshop.gr/orders/Payment_FailEURO123 

И это результат я хочу:

wXRSbgCX2Kq6gSOVE6+c9VpvSRQ= 
+0

посмотрите этот пост http://stackoverflow.com/questions/25761344/how-to-crypt-string-to-sha1-with-swift – Enix

+0

http: //stackoverflow.com/a/34190615/341994 – matt

+0

http://stackoverflow.com/questions/26970807/implementing-hmac-and-sha1-encryption-in-swift, http://stackoverflow.com/questions/24099520/ commonhmac-in-swift –

ответ

2

Является ли это то, что вам необходимость?

import UIKit 

extension String { 
    func sha1() -> String { 
     let data = self.dataUsingEncoding(NSUTF8StringEncoding)! 
     var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0) 
     CC_SHA1(data.bytes, CC_LONG(data.length), &digest) 
     let hexBytes = digest.map { String(format: "%02hhx", $0) } 
     return hexBytes.joinWithSeparator("") 
    } 

    func sha1Data() -> NSData { 
     let data = self.dataUsingEncoding(NSUTF8StringEncoding)! 
     var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0) 
     CC_SHA1(data.bytes, CC_LONG(data.length), &digest) 
     let digestData = NSData(bytes: digest, length: digest.count) 
     return digestData 
    } 
} 


class TestSHA1Digest: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let b64 = calculateDigest("2.045020311114033331503343429780020454510MDAwMDAwMDAwMDAwMDA2ODkzOTI=https://myeshop.gr/orders/Payment_Okhttps://myeshop.gr/orders/Payment_FailEURO123") { 
      print("SHA1: \(b64)") 
     } else { 
      print("Calcuate SHA1 failed") 
     } 
    } 

    func calculateDigest(data: String) -> String? { 
     let shaData = data.sha1Data() 
     return shaData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 
    } 
} 

[Выход] SHA1: wXRSbgCX2Kq6gSOVE6 + c9VpvSRQ =

PS. Я использую быстрый 2 + Xcode 7.3.1. Пожалуйста, дайте мне знать, если вы используете swift 3.

+0

Enix спасибо очень важно для ответа. Если вы хотите обновить его для быстрого 3, но также оставите Swift 2 –

Смежные вопросы