2016-07-08 2 views
2

私はスウィフトに私のPythonコードを変換しようとしている、とのコード行の等価/代替(BASE64にMD5ハッシュダイジェスト)を見つけるように見えることはできません。PythonのSwift Equivant - hash.digest()。encode( 'base64')。strip()?基本的に

return hash.digest().encode('base64').strip() 

出典:https://stackoverflow.com/a/32041572/3697446

24文字の文字列を返します。これはまさに私の使用に必要なものです。私は(?それはhexdigestではなくダイジェストをコードするbase64であったので、私は推測している)をbase64のためにこれを使用してみましたが、長いと多くの文字列を作成します。

func toBase64(url: String) -> String{ 
    let data = url.dataUsingEncoding(NSUTF8StringEncoding) 
    return data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 
} 

この私のMD5がCommonCryptoのヘッダを橋渡しして(設定されています/ CommonCrypto.h):

func md5(string string: String) -> String { 
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0) 
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) { 
     CC_MD5(data.bytes, CC_LONG(data.length), &digest) 
    } 

    var digestHex = "" 
    for index in 0..<Int(CC_MD5_DIGEST_LENGTH) { 
     digestHex += String(format: "%02x", digest[index]) 
    } 

    return digestHex 
} 

どのようなヘルプが多くappricieated!

+0

あなたが正しく推測されているが...あなたは私がダイジェストではなくなるだろうどのようにマーティン-R @ –

+0

を知っていますか、これを定義して

ヘクスダイジェストよりも? (あなたの言うことが何であれ)私はいくつかのことを試しましたが、どこにもありませんでした – user3697446

答えて

2

自分が言っている通り、md5(string:)hexdigestに相当し、digestではありません。 md5ダイジェストの結果はバイトシーケンスであり、SwiftのNSDataに保持する方がよいでしょう。あなたはこのような何か書くことができます

func md5Data(string string: String) -> NSData { 
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0) 
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) { 
     CC_MD5(data.bytes, CC_LONG(data.length), &digest) 
    } 

    let digestData = NSData(bytes: digest, length: Int(CC_MD5_DIGEST_LENGTH)) 

    return digestData 
} 

let result = md5Data(string: "test").base64EncodedStringWithOptions([]) 
print(result) //->"CY9rzUYh03PK3k6DJie09g==" 
+0

ありがとうございました!私が探していたもの – user3697446

関連する問題