1は、一般的にコンピューティングリソースのハッシュ必要時に考慮すべき:リソース+リソースメタ、メタ依存関係+依存
図2に示すように、一般的には、結果を暗号化する必要がある場合、ハッシュ計算資源組み込みC#MD5を直接暗号化することができます
(構造は完璧ではない、使用することを学ぶ)、次のように特定の実装、コードは次のとおりです。
1 使用してシステムを。 2 使用System.IOと、 3 使用System.Collections.Genericと、 4 使用UnityEditorと、 5 使用UnityEngineと、 6 使用System.Security.Cryptographyと、 7 使用System.Textのを。 8 9 パブリック クラステスト 10 { 11 [のMenuItem(" BuildTool /ラグ" )] 12 静的 ボイドLugsTest() 13 { 14 DEBUG.LOG(ComputeAssetHash(" 資産/ UI /プレハブ/ ui_login / ui_login.prefab " )); 15 } 16 17。 静的 ストリング ComputeAssetHash(列assetPath)が 18である { 19 IF(!File.Exists(assetPath)) 20が リターン NULL ; 21は 22である リスト< バイト > =リストの新しい新しいリスト< バイト > (); 23は、 24 // リソースファイルとメタバイト配列読ん 25 list.AddRange(GetAssetBytes(assetPathを)); 26は 27 //リソースファイルの依存関係とメタバイト配列(リソースの依存関係も、本質的にパス)を読み取る 28 のString [] =補足AssetDatabase.GetDependencies(assetPath); 29 用(INT I = 0、= IMAX dependencies.Length。 ++; Iは、IMAXを< 私は) 30 ; list.AddRange(GetAssetBytes(依存性[I])) 31れる 32 // その後、他のリソースの依存関係が存在する場合、それは、リスト内の対応するバイト配列に読み込まれる必要があり、かつ次にハッシュコードを計算 33は 34である // ハッシュリソースを返す 35 リターンComputeHash(List.toArray()); 36 } 37 38である 静的 バイト [] GetAssetBytes(文字列assetPath) 39 { 40 であれば(!File.Exists(assetPath)) 41 リターン ヌル。 42 43 一覧< バイト >リスト= 新しいリスト< バイト > (); 44 45 のvar assetBytes =のFile.ReadAllBytes(assetPath)。 46 list.AddRange(assetBytes)。 47 48 文字列 metaPath = assetPath + " .META " 。 49件 のvar metaBytes =のFile.ReadAllBytes(metaPath)。 50 list.AddRange(metaBytes)。 51 52 リターンlist.ToArray()。 53 } 54 55 静的 MD5のMD5 = NULL ; 56 静的MD5 MD5 57 { 58は、 取得し 59 { 60の 場合(ヌル == MD5) 61 MD5 = MD5.Create()。 62 リターンMD5; 63 } 64 } 65 66 静的 文字列 ComputeHash(バイト[]バッファ) 67 { 68 であれば(ヌル ==バッファ|| buffer.Length < 1 ) 69 リターン "" 。 70 71 バイト []ハッシュ= MD5.ComputeHash(バッファ) 72 StringBuilderのSB = 新規のStringBuilder(); 73 74 のforeach(VARの B におけるハッシュ) 75 sb.Append(b.ToString(" X2 " )); 76 77 リターンsb.ToString()。 78 } 79 80 81 }
結果は以下の通りであります: