<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:Webdings;
        panose-1:5 3 1 2 1 5 9 6 7 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1107001152;
        mso-list-type:hybrid;
        mso-list-template-ids:552129268 -1878604358 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:2;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:"MS Mincho";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>2 ways to solve:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>convert to utf8string and hash that one. Most old ansi-hashes will match the md5 of utf8 (unless they contain special characters, like umlauts and other diacritics). <o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>check if your password contains Unicode (if ansistring(pw)&lt;&gt;pw then … )  and depending on that one use the right GetMD5 call (if not use ansi, if yes use widestring). This workaround will deal with umlauts and other diacritics correctly. <o:p></o:p></span></p><p class=MsoListParagraph><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoListParagraph><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>Ps: </span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>GetMD5(@pc[0], 1+lp+16); &nbsp; should be GetMD5(@pc[0], 1+</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:red'>lp*2</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'>+16); &nbsp;for Unicode strings!</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'><br><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Kind regards,<br><br></span><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Stefan Müller</span></b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>,<br>R&amp;D Manager</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D'><br><br></span><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:white;background:red'>ORCL</span></b><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Toolbox Ltd.</span></b><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> <br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Auckland, New Zealand</span><span style='font-size:10.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> <o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:9.0pt;font-family:Webdings;color:#777777'><br>P</span><span style='font-size:9.0pt;font-family:"Arial","sans-serif";color:#777777'>&nbsp;Please consider the environment before printing this email<br><br>This message is intended for the adresse named above and may contain privileged or confidential information.<br>If you are not the intended recipient of this message you must not use, copy, distribute or disclose it to anyone.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> delphi-bounces@listserver.123.net.nz [mailto:delphi-bounces@listserver.123.net.nz] <b>On Behalf Of </b>Jolyon Direnko-Smith<br><b>Sent:</b> Monday, 27 March 2017 11:15 a.m.<br><b>To:</b> NZ Borland Developers Group - Delphi List<br><b>Subject:</b> Re: [DUG] Problem converting this<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>There is nothing that immediately jumps out as suspicious in the code, other than the call into OverByteICS code (which is not shown and so cannot be verified).<br><br>If the problem is that for any given input you are now getting a different MD5 than you did previously, then the problem may simply be that when you has a UnicodeString version of what was previously an ANSIString, then your hash will be different due to the fact simply that the two strings <i>are in fact different</i>.<br><br>&nbsp; &nbsp; &nbsp; Hello#0<o:p></o:p></p><div><p class=MsoNormal>vs &nbsp; H#0e#0l#0l#0o#0#0#0<br><br><br>i.e. the code is perfectly valid for hashing an ANSIString in a Delphi version where String == ANSIString, and yet is also perfectly valid for hashing a UnicodeString in versions where String == UnicodeString.<br><br>But you will get a different result in each case simply because ANSIString &lt;&gt; UnicodeString.<br><br><br>If that is the case, and you want/need to ensure you are still hashing an ANSIString in Delphi 2010+ then you will need to convert the (Unicode)String to an ANSIString before hashing it.<br><br>&nbsp; - change all your string/char types in the function to ANSIString/ANSIChar<br>&nbsp; - convert the input strings to ANSI&nbsp;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; - process them as ANSI<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; - ensure you are using the correct ANSI implementation of OverByte (or possibly look at switching to System.Hash)<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; - convert your results back from ANSI to UnicodeString when done (if necessary/appropriate)<br><br><br>hth<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On 27 March 2017 at 08:32, Jeremy Coulter &lt;<a href="mailto:jscoulter@gmail.com" target="_blank">jscoulter@gmail.com</a>&gt; wrote:<o:p></o:p></p><div><p class=MsoNormal>Hi all. It might be I have been mucking around with this too much and have just simply got confused!<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I am converting some code from Delphi 2007 to 10.1.<o:p></o:p></p></div><div><p class=MsoNormal>I am having an issue on D 10.1 with this code which is fin under 2007 and it will be due to the unicode stuff that was introduced.<o:p></o:p></p></div><div><p class=MsoNormal>Can someone let me know how I would convert this to be 10.1 compatible? I have spent some time on it and not really got any where.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Thanks, Jeremy<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal>function encode_password(passw, hash: string): string;<o:p></o:p></p></div><div><p class=MsoNormal>var<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; ac, temp: string;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; pc: array of char;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; i, lp: integer;<o:p></o:p></p></div><div><p class=MsoNormal>begin<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;if (hash&lt;&gt;'') and (passw&lt;&gt;'')<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; then begin<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; lp:=length(passw);<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; setlength(pc,1+lp+16);<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; pc[0]:=#0;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; move(passw[1],pc[1],lp);<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; for i:=0 to 15<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;do begin<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ac:=copy(hash,i*2+1,2);<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ac&lt;&gt;''<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; then pc[1+lp+i]:=Chr(StrToInt('$' + ac));<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; temp:=GetMD5(@pc[0], 1+lp+16); &nbsp;//GETMD5 is in the OverByteICS code so should be ok<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp;end<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; else begin<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp; temp:='#error#';<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp; &nbsp; &nbsp; &nbsp;end;<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;result:=lowercase(temp);<o:p></o:p></p></div><div><p class=MsoNormal>end;<o:p></o:p></p></div></div></div><p class=MsoNormal><br>_______________________________________________<br>NZ Borland Developers Group - Delphi mailing list<br>Post: <a href="mailto:delphi@listserver.123.net.nz">delphi@listserver.123.net.nz</a><br>Admin: <a href="http://delphi.org.nz/mailman/listinfo/delphi" target="_blank">http://delphi.org.nz/mailman/listinfo/delphi</a><br>Unsubscribe: send an email to <a href="mailto:delphi-request@listserver.123.net.nz">delphi-request@listserver.123.net.nz</a> with Subject: unsubscribe<o:p></o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></body></html>