diff --git a/Oqtane.Server/Pages/Files.cshtml.cs b/Oqtane.Server/Pages/Files.cshtml.cs
index 7be27e89..551be05f 100644
--- a/Oqtane.Server/Pages/Files.cshtml.cs
+++ b/Oqtane.Server/Pages/Files.cshtml.cs
@@ -144,7 +144,7 @@ namespace Oqtane.Pages
etagInput += $":{Request.QueryString.Value}";
}
- etag = Utilities.GenerateHashMD5(etagInput);
+ etag = Utilities.GenerateSimpleHash16(etagInput);
var header = "";
if (HttpContext.Request.Headers.TryGetValue(HeaderNames.IfNoneMatch, out var ifNoneMatch))
diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs
index d38fe490..30e25bb2 100644
--- a/Oqtane.Shared/Shared/Utilities.cs
+++ b/Oqtane.Shared/Shared/Utilities.cs
@@ -620,11 +620,17 @@ namespace Oqtane.Shared
}
}
- public static string GenerateHashMD5(string input)
+ public static string GenerateSimpleHash16(string text)
{
- var bytes = Encoding.UTF8.GetBytes(input);
- var hashBytes = MD5.HashData(bytes);
- return Convert.ToHexString(hashBytes);
+ unchecked // prevent overflow exception
+ {
+ long hash = 23;
+ foreach (char c in text)
+ {
+ hash = hash * 31 + c;
+ }
+ return hash.ToString("X16");
+ }
}
[Obsolete("ContentUrl(Alias alias, int fileId) is deprecated. Use FileUrl(Alias alias, int fileId) instead.", false)]