दिलचस्प पोस्ट
जावास्क्रिप्ट सरणी से यादृच्छिक मूल्य प्राप्त करना अक्षांश डेटा सेट नहीं कर सकता एंड्रॉइड में sendStickyBroadcast और sendBroadcast के बीच अंतर क्या है टेम्पलेट कोड के अंदर एक वैरिएबल का मान कैसे सेट करें? स्प्रिंग बूट http अनुरोध इंटरसेप्टर जोड़ते हैं यूटीएफ -8 में 3 बाइट्स से अधिक ले जाने वाले यूनिकोड वर्णों को फ़िल्टर करने (या बदलने के लिए) कैसे करें? प्रतिक्रिया के बीच अंतर। और प्रतिक्रिया। नोड जेएस में लिखें जावास्क्रिप्ट और PHP के माध्यम से Google+ लॉगिन React.js में स्क्रॉल पर एक घटक की शैली को अद्यतन करें अजगर दुभाषिया और / या सीएमडी.एक्सई के आउटपुट को पायथन स्क्रिप्ट से कैद कैसे करें? जावा: नए कीवर्ड के साथ अंतरफलक यह कैसे संभव है? IPhone UITableView स्क्रोलिंग प्रदर्शन में सुधार के लिए ट्रिक्स? अपने कंटेनर की शेष चौड़ाई को भरने के लिए शैली इनपुट तत्व सीएसएस फ़्लोटिंग डिविज़्स अलग ऊंचाई के साथ उन दोनों के बीच अंतरिक्ष के साथ गठबंधन कर रहे हैं बूटस्ट्रैप 3 – एक पंक्ति में 12 से अधिक कॉलम

तेजी से एचएमएसी और एसएचए 1 एन्क्रिप्शन लागू करना

मैं स्विफ्ट में अपेक्षाकृत नया हूं और मैं एचएमएसी और एसएचए 1 का उपयोग कर एन्क्रिप्ट करने में फंस गया हूं। मैं निम्नलिखित उत्तर https://stackoverflow.com/a/24411522/4188344 मिला लेकिन मैं यह कैसे ठीक से लागू करने के लिए बाहर काम नहीं कर सकता। कोई मदद अद्भुत होगी

Solutions Collecting From Web of "तेजी से एचएमएसी और एसएचए 1 एन्क्रिप्शन लागू करना"

समस्या सुलझ गयी! सबसे पहले मैं स्ट्रिंग फ़ंक्शन का ठीक से उपयोग नहीं कर रहा था … मैं इस के साथ समाप्त हुआ:

  let hmacResult:String = "myStringToHMAC".hmac(HMACAlgorithm.SHA1, key: "myKey") 

तो मैं भूल गया था कि मुझे बेस 64 के लिए एचएमएसी परिणाम एनकोड की आवश्यकता थी। इसलिए मैंने अपने सवाल से जुड़े स्ट्रिंग फ़ंक्शन को संशोधित किया …

 enum HMACAlgorithm { case MD5, SHA1, SHA224, SHA256, SHA384, SHA512 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 } return CCHmacAlgorithm(result) } func digestLength() -> Int { var result: CInt = 0 switch self { case .MD5: result = CC_MD5_DIGEST_LENGTH case .SHA1: result = CC_SHA1_DIGEST_LENGTH case .SHA224: result = CC_SHA224_DIGEST_LENGTH case .SHA256: result = CC_SHA256_DIGEST_LENGTH case .SHA384: result = CC_SHA384_DIGEST_LENGTH case .SHA512: result = CC_SHA512_DIGEST_LENGTH } return Int(result) } } extension String { func hmac(algorithm: HMACAlgorithm, key: String) -> String { let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding) let cData = self.cStringUsingEncoding(NSUTF8StringEncoding) var result = [CUnsignedChar](count: Int(algorithm.digestLength()), repeatedValue: 0) CCHmac(algorithm.toCCHmacAlgorithm(), cKey!, strlen(cKey!), cData!, strlen(cData!), &result) var hmacData:NSData = NSData(bytes: result, length: (Int(algorithm.digestLength()))) var hmacBase64 = hmacData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding76CharacterLineLength) return String(hmacBase64) } } 

यह मुझे का सही परिणाम दे रहा है

 lGCtbW+DNHFraNoxPGK3trgM/98= 

स्विफ्ट 3 के लिए अपडेट किया गया है @ डेविड वुड का समाधान:

 enum HMACAlgorithm { case MD5, SHA1, SHA224, SHA256, SHA384, SHA512 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 } return CCHmacAlgorithm(result) } func digestLength() -> Int { var result: CInt = 0 switch self { case .MD5: result = CC_MD5_DIGEST_LENGTH case .SHA1: result = CC_SHA1_DIGEST_LENGTH case .SHA224: result = CC_SHA224_DIGEST_LENGTH case .SHA256: result = CC_SHA256_DIGEST_LENGTH case .SHA384: result = CC_SHA384_DIGEST_LENGTH case .SHA512: result = CC_SHA512_DIGEST_LENGTH } return Int(result) } } extension String { func hmac(algorithm: HMACAlgorithm, key: String) -> String { let cKey = key.cString(using: String.Encoding.utf8) let cData = self.cString(using: String.Encoding.utf8) var result = [CUnsignedChar](repeating: 0, count: Int(algorithm.digestLength())) CCHmac(algorithm.toCCHmacAlgorithm(), cKey!, Int(strlen(cKey!)), cData!, Int(strlen(cData!)), &result) let hmacData:NSData = NSData(bytes: result, length: (Int(algorithm.digestLength()))) let hmacBase64 = hmacData.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength76Characters) return String(hmacBase64) } } // usage: let hmacResult: String = "myStringToHMAC".hmac(algorithm: HMACAlgorithm.SHA1, key: "foo") 

मैंने इस मॉड्यूल का इस्तेमाल किया है जिसे मैंने अपनी परियोजना को एक रूपरेखा के रूप में जोड़ा था:

https://github.com/CryptoCoinSwift/SHA256-Swift

और मैंने SHA256.swift निम्नलिखित String एक्सटेंशन को भी जोड़ा है:

 public extension String { func sha256(key: String) -> String { let inputData: NSData = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! let keyData: NSData = key.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! let algorithm = HMACAlgorithm.SHA256 let digestLen = algorithm.digestLength() let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CCHmac(algorithm.toCCEnum(), keyData.bytes, UInt(keyData.length), inputData.bytes, UInt(inputData.length), result) let data = NSData(bytes: result, length: digestLen) result.destroy() return data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) } } 

इस तरह String से बेस 64-एन्कोडेड हस्ताक्षर का उत्पादन इस तरह किया जा सकता है:

 let signature: String = "\(payload)".sha256(secretKey) 

यदि आप हेक्साडेसिमल प्रारूप में एक ही परिणाम चाहते हैं, तो आप निम्न एक्सटेंशन का उपयोग कर सकते हैं:

 extension String { func hmac(algorithm: HMACAlgorithm, key: String) -> String { let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding) let cData = self.cStringUsingEncoding(NSUTF8StringEncoding) var result = [CUnsignedChar](count: Int(algorithm.digestLength()), repeatedValue: 0) let length : Int = Int(strlen(cKey!)) let data : Int = Int(strlen(cData!)) CCHmac(algorithm.toCCHmacAlgorithm(), cKey!,length , cData!, data, &result) let hmacData:NSData = NSData(bytes: result, length: (Int(algorithm.digestLength()))) var bytes = [UInt8](count: hmacData.length, repeatedValue: 0) hmacData.getBytes(&bytes, length: hmacData.length) var hexString = "" for byte in bytes { hexString += String(format:"%02hhx", UInt8(byte)) } return hexString } } 

मैंने ऊपर दिए गए उत्तर की जांच की और इसे बहुत लंबा मिला।

समाधान : मुझे तीसरे पक्ष मिले IZSwiftCommonCrypto

फली का प्रयोग करें: pod 'IDZSwiftCommonCrypto'

और वांछित आउटपुट प्राप्त करने के लिए निम्नलिखित फ़ंक्शन का उपयोग करें:

 func getHMacSHA1(forMessage message: String, key: String) -> String? { let hMacVal = HMAC(algorithm: HMAC.Algorithm.sha1, key: key).update(string: message)?.final() if let encryptedData = hMacVal { let decData = NSData(bytes: encryptedData, length: Int(encryptedData.count)) let base64String = decData.base64EncodedString(options: .lineLength64Characters) print("base64String: \(base64String)") return base64String } else { return nil } } 

परिणाम जांचने के लिए निम्नलिखित वेबसाइट का उपयोग करें:

https://hash.online-convert.com/sha1-generator

स्विफ्ट 4.0 में परीक्षण किया