さて、さまざまなフレームワークやライブラリ、インターネットで見つけたものを使用する前に解決した問題に時々遭遇し、問題は比較的迅速かつ簡単に解決され、問題が最初に問題であった理由もわかります。場所。
ただし、絶対に 0 の意味を持つ問題に遭遇することもあれば、解決策が否定的な意味を持つ場合はさらに悪いことになります。
Data
私の問題は、それから MD5 ハッシュを取得して作成したいということです。
あらゆる種類の解決策を見つけましたが、どれも機能しません。
実際に私を本当に悩ませているのは、何かから MD5 ハッシュを取得するという簡単なタスクに対して、ソリューションが不必要に複雑に見えることです。
Crypto
とCommonCrypto
フレームワークを使用しようとしていますが、Soffes
かなり簡単に思えますよね? 右?
はい!
しかし、なぜまだエラーが発生するのfatal error: unexpectedly found nil while unwrapping an Optional value
ですか?
私が理解していることから、bymyData.md5
の拡張子で提供されるデータは「オプション」のようです。しかし、なぜ?Crypto
Soffes
私が実行しようとしているコードは次のとおりです。
print(" md5 result: " + String(data: myData.md5, encoding: .utf8)!)
myData
上記のコード行の後、そのデータをサーバーに送信すると、データが存在するため、どこにデータが 100% 含まれています。
その上、myData.md5.count
byのカウントを表示すると、print(String(myData.md5.count))
完全に機能します。
したがって、私の質問は基本的に次のとおりです。データをMD5ハッシュして文字列として出力するにはどうすればよいですか?
編集:
私が試したこと
それはうまくいく
MD5: test
PHPスクリプトで文字列を実行する098f6bcd4621d373cade4e832627b4f6
と、Swiftコード"test".md5()
でも得られます098f6bcd4621d373cade4e832627b4f6
それはうまくいきません
UInt8
からのバイト配列をData.md5()
、正しい MD5 値を表す文字列に変換します。
私が行ったさまざまなテストは次のとおりです。
var hash = ""
for byte in myData.data.md5() {
hash += String(format: "%02x", byte)
}
print("loop = " + hash) //test 1
print("myData.md5().toHexString() = " + myData.md5().toHexString()) //test 2
print("CryptoSwift.Digest.md5([UInt8](myData)) = " + CryptoSwift.Digest.md5([UInt8](myData)).toHexString()) //test 3
500 バイトのテスト データを使用した 3 つのテストすべてで MD5 値56f6955d148ad6b6abbc9088b4ae334d
が得られ、PHP スクリプトでは6081d190b3ec6de47a74d34f6316ac6b
テスト サンプル (64 バイト): 生データ:
FFD8FFE0 00104A46 49460001 01010048 00480000 FFE13572 45786966 00004D4D
002A0000 0008000B 01060003 00000001 00020000 010F0002 00000012 00000092
テスト 1、2、および 3 MD5:7f0a012239d9fde5a46071640d2d8c83
PHP MD5:06eb0c71d8839a4ac91ee42c129b8ba3
PHP コード:echo md5($_FILES["file"]["tmp_name"])