Ik kan inderdaad geen reden bedenken waarom je ASCII zou verkiezen over UTF8, maar daar doelde ik nog nog geeneens op. Bitconverter en Base64 geven niet de gewenste (huidige manier van opslaan in db) format terug, en het moet aansluiten op de oude situatie.Davio schreef op dinsdag 21 mei 2013 @ 11:30:
Hihi, .NET gebruikt intern UTF-8 toch?
Dan zou het mijns inziens zinvoller zijn om een Encoding.UTF8.GetBytes te doen.
Naast dat je BitConverter.ToString(data) kunt doen natuurlijk.
Of eventueel de Base64-representatie als je het toch als string op wilt slaan.
Anyhow, er gaat zoveel mis in deze paar regels code. Ongeacht hoe je het zou willen encoden. StringBuilder versus String, Disposen, ToLower() op elk resultaat in de for-loop.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| /// <summary> /// Convert current instance to a MD5 hash /// </summary> /// <param name="value">Current instance</param> /// <returns>MD5 hash</returns> public static string ToMD5(this string value) { StringBuilder hexadecimal = new StringBuilder(); using (MD5 md5Hash = MD5.Create()) { byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(value)); for (int i = 0; i < data.Length; i++) hexadecimal.Append(data[i].ToString("x2")); } return hexadecimal.ToString().ToLower(); } |
Lijkt mij al een stuk mooier. Nog meer suggesties?