2016-11-30 11 views
0

文字列をmd5に変換するプロジェクトにCryptoSwift.frameworkがあります。結果のハッシュ・ストリングは、サーバー側で許可するために使用されます。したがって、このサーバーに送信するすべての要求はこの関数を使用しています。md5は無効な結果を返しますか?

私は
didRegisterForRemoteNotificationsWithDeviceTokenメソッドからdeviceTokenオブジェクトを受け取ります。それから、 "toHexString"関数を使って文字列に変換します。いくつかのカスタム処理を追加することAlamofireリクエストメソッドの周りに単純なラッパーであり、私何気なくAPIHelperに渡し(サーバ側との相互作用のための私のカスタムクラス)

APIHelper.register(deviceToken: deviceToken.toHexString()) 

class func register(deviceToken: String) 
    { 
     request(.get, resource: FWWebRequests.registerToken, parameters: ["token": deviceToken]) { (object, result) in 
      print(object as Any) 
      print(result) 
     } 
    } 

と結果サーバーから常に "無効なハッシュ文字列"です。しかし、同じハッシングを使用する他のメソッドは正常に動作します。だから、疑問がある - これはハッシング方法の問題かもしれない。もしそうでなければ、何ができますか?

+1

おそらくエンコードエラーです。しかし、あなたは私たちに利点を持っている、あなたがデバッグすることができます、私たちはできませんし、私はあなたの質問にそれに答えるのに十分な情報があるかどうかはわかりません。 –

+0

ストリングをMD5に直接渡すことはできません。最初にエンコードする必要があります。 CryptoSwiftがあなたの認証に使用するはずのエンコーディングを使用していると確信していますか? – Codo

+0

MD5がなぜ問題だと思いますか?間違った可能性のある承認(例えば、ハッシュ・ストリングの構築)には多くのステップが含まれています。関連するすべてのコードを表示します。 – Codo

答えて

2

いいえアルゴリズム MD5は間違った結果を生成することはできません。 MD5は、擬似ランダム値で正確に16バイトを返します。つまり、出力は(簡単に)ランダムと区別できません。

ここで問題となるのは、MD5の出力(または他の暗号化機能)が文字列として直接使用されることです。ただし、完全なランダム値は、想定されるエンコード(Windows-1252/LatinまたはUTF-8など)と一致しない場合があります。つまり、エンコード/デコード中にデータが失われる可能性があり、16文字/バイトとは異なるサイズの文字列が生成される可能性があります。

したがって、長さが間違っているか、ハッシュ値自体(16進数など)のエンコードが間違っていることが間違っている可能性があります(ヌル以外)。これはもちろんI/Oの問題(ソケットなどから十分なデータを読み取ることができない)に起因する可能性があります。

関連する問題