<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14146</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14146&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary».]]></description>
		<lastBuildDate>Thu, 13 Sep 2018 00:49:38 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128679#p128679</link>
			<description><![CDATA[<p>Ну, мало ли отчего может зависеть, может, определённый размер срабатывает.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 13 Sep 2018 00:49:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128679#p128679</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128675#p128675</link>
			<description><![CDATA[<p>Если запустить 18 код.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 13 Sep 2018 00:34:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128675#p128675</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128674#p128674</link>
			<description><![CDATA[<p>В смысле? У меня</p><p><span class="postimg"><img src="https://i.imgur.com/PTndMML.png" alt="https://i.imgur.com/PTndMML.png" /></span></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 13 Sep 2018 00:28:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128674#p128674</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128673#p128673</link>
			<description><![CDATA[<p>Но эти бинарные данные возвращает нормально:<br /></p><div class="codebox"><pre><code>var =
( Join
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
)
size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)

oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := adTypeBinary := 1
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(A_ScriptDir . &quot;\test.txt&quot;, adSaveCreateOverWrite := 2)

oADO.Position := 0
oADO.Type := 2 ; text
; oADO.Charset := &quot;utf-16&quot; 
aText := oADO.ReadText()
oADO.Close

msgbox % Base64Enc(aText, size)

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes) 
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}

Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;, &amp;Bin ,&quot;UInt&quot;, nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Ptr&quot;,0,&quot;UIntP&quot;,Rqd )
   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;,&amp;Bin, &quot;UInt&quot;,nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Str&quot;,B64, &quot;UIntP&quot;,Rqd )
   Return B64
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 13 Sep 2018 00:17:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128673#p128673</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128672#p128672</link>
			<description><![CDATA[<p>Так это не текст.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 13 Sep 2018 00:09:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128672#p128672</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128670#p128670</link>
			<description><![CDATA[<p>Это в твоём примере.<br />А теперь возьми мой:<br /></p><div class="codebox"><pre><code>var =
( Join
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
)
size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)

oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := adTypeBinary := 1
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(A_ScriptDir . &quot;\test.txt&quot;, adSaveCreateOverWrite := 2)

oADO.Position := 0
oADO.Type := 2 ; text
; oADO.Charset := &quot;utf-16&quot; 
aText := oADO.ReadText()
oADO.Close

msgbox % Base64Enc(aText, size)

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes) 
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}

Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;, &amp;Bin ,&quot;UInt&quot;, nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Ptr&quot;,0,&quot;UIntP&quot;,Rqd )
   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;,&amp;Bin, &quot;UInt&quot;,nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Str&quot;,B64, &quot;UIntP&quot;,Rqd )
   Return B64
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 12 Sep 2018 23:54:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128670#p128670</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128667#p128667</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>А с oADO.ReadText() последний символ заменяется на NULL, непонятно почему?</p></blockquote></div><p>У меня не заменяется:<br /></p><div class="codebox"><pre><code>var =
(
EAQgAEEEIABvAEEARABPAC4AUgBlAGEAZABUAGUAeAB0ACgAKQAgAD8EPgRBBDsE
NQQ0BD0EOAQ5BCAAQQQ4BDwEMgQ+BDsEIAA3BDAEPAQ1BD0ETwQ1BEIEQQRPBCAA
PQQwBCAATgBVAEwATAAsACAAPQQ1BD8EPgQ9BE8EQgQ9BD4EIAA/BD4ERwQ1BDwE
QwQ/AA==
)
size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)

oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := adTypeBinary := 1
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(A_ScriptDir . &quot;\test.txt&quot;, adSaveCreateOverWrite := 2)

oADO.Position := 0
oADO.Type := 2 ; text
; oADO.Charset := &quot;utf-16&quot; 
aText := oADO.ReadText()
oADO.Close

MsgBox, % &quot;|&quot; . aText . &quot;|&quot;

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes) 
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 12 Sep 2018 21:15:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128667#p128667</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128652#p128652</link>
			<description><![CDATA[<p>Цель - распаковать всё, потом разделить на 2 части.<br />Первую часть - 32 байта оставить как есть, а вторую распаковать с помощью zlib1.dll.<br />В распакованной части внести изменения, запаковать zlib1.dll объеденить с 32 байтами первой части и всё это запаковать в Base64.<br />Проще, конечно, обойтись без ADODB.Stream, но хочется разобраться с двумя предыдущими вопросами.<br /></p><div class="codebox"><pre><code>var =
( Join
AQAAAAAAAABkcwAAAAAAAENvbXByZXNzZWRUaXRsZQB4nO0da3MaOVL+J9R9u9pzABv8qNJ5y/Hj4jonThlvEj6lMMY2twRYwImdH3+7/ZBG7wET28BmygVmulutVqu71ZJmNH/+X4pfxb34InqiJL6KjhiJseiKgeiLf4t/iKp4JSrwvwSYvmgD/AqwfXFD2N/EhTgW60C1RTS/ij0hxT7QDMQllPgszuHXQEwC+AVwmUCdHcJ8cOrdExtQZ0XswGcbPhtAUQ5opHhLnPn6s2gAfkLXKN2YKN5DDS3xANhjoBqJb3A1Ain2gG4k7qAEck5TSeA6oasJYHU9bbjukD72xDVge1Abc5pGjRKNMr304G8P2scy+HApjoDXmKAnVJopfSjS9UFarPEa/vIlzKdF+QZAO4lKGGJsGc9An5OIlBqO0Ok9Vs6xEmzvmOTtEn4kTqnfBlTDGOzvQ9J+sbxN7V8fkT46wH1C9VwDPMZvQ/Gy6S+Ay5Bk1G2P4Vh+9J520Cs2BuXqgj5aUPqO+mYc0McopHhDmkQ+h4Tvklb8sikq5puvEV9ryOEL2Y7WUZ7OhuITWNEJfB8BlwbAqmKXfB3rDrFYogm/T8Q7gDE9RwWmd3FI3RAHYJ1H8PcO7OicSjBtiJHQ9hHI+A3acUstGanW6gij8eekp1tqL173iee00r4+Q1352twnb2Drxmvdrw2gwZ4w3rBPtbUIi9fXyvNeqfYamITvAbTfxmqIpLq4ZYzfJbwNlSDLgOQagPQ2lQvn6Jcnp8buW1pKt6Mi6rkt0fi8ttRnbE19SntSEpdn6r3XQNMWvyt7uSPfi3lJTXlJA2RtAQ3iz6n1HaoTR1+MIzWQehe8gCXMp5UQfcMx4EzZ3hCgGAt0BD6Ha/yPJfs0En6hcnYr2ZvS5RAfazFiDknCFkB6UBbHyocstqdbuk08460r5/J0cRdwdU9+2MlGkaHjr08jw/R6/gOwFsBuKeKfgb38T8UOlxPbT4f0d0AlzGgyFn8AVYtkQRniVBI4D6iXNOwAOA/IErBPTP8gj3zakNcZffen8jF06OWI6YiP8P+KYude5ukhRoIFdsmXRjTm8ZUuEcdJiMk8wr0G3Hf4zZ7me0GKSlqtOSAv6BPuGGh6ZFvcM5tgFa9AktIT/eJYNUvNEmylR1Y1pL55aSlnrx2pH2ft2nsOKLJhD8Wo7Oikx45WNjPReZgP5eh/T17SJ7lw/PbtIk6DVjWgWcFH1R53DhFiJXkPxkHU0qmy7jHkN36NaboUj+aMPJpq3tWjMbCv8g/0Ej2ucsYd4iXNZC4pY8fxxY6sH1VbefxNUUnyySHxbpNvXhBtg8aPdtYrVZrrIa/Z6FN8TdSz2zaNVtJsrRfoU0O1HrQ1u1e+HbLtvFtx67RLzmeb0zkUlvm8lhm3xMusN5bDRv0RubDSn81KU/Y4VrX2VS2rZ5/FGP/3sFHfEssz5qj588D4aqVeA8gvW4rMRLk0z1U1D25/g77byqu6MNfp0LxgS/WIgaEe7sUb+G1WTGpq9T3EMPV/SQqzOu3C0B95HVhrsEHzAL3Ow96Yppjd77Hehpr/ov63s/UhF+5TxtZHYhS6XI+ixsRprw1lut9oDodaMJYT1hGj4vL2HNjuAXduzKU4HoSxwsZJwHZhpovr9ldCr4q6MKY5IetnX9JtDOFMe0323oPY3aKoskerY12iW884vwVL1FzCEprTgPR3THCcQz5EuRo+efQuTzteaZl8Pm5MszEmitSDUnaEuSbNtGg94oZi54OjvxDHkST00fIU75+FRq8b61b51yXoz8NIzDAUr5VX5kWpiaWbivpjSzV6GdIKUjeT7JDWV9E2W9kaml7Pn05p1o94VQEjgB7NYvYfo5O0i8Wt5DjqrvKFWEm8UQJcw0f8gMYOHL3Xsz5OUaRKNy37SOFRVl7hxRzlM1wNKDLyyM/rOzqK59NJ6pERYfrKkyeWjaawj4syR9BjlxTLe9SW2yzbaKhR5pwiQBgPH1MSdyn1CjSvfLcoAzD+yNaLXsc7l/nUeufWtXyEH5P13GSynKoeinlFXXmFX8Ydd2uRUZf3YrFOM664MCl4hb1n+YsNkTQq8/6sr1kbI0n+I4ocHTX6XGW7CGg7ofQut8eXxxVsH2p0z2NbHgX6j4s7I934kqWoJOVv7GFvVPzHvvPLp6hY97jSM6EYrqNwNeuFEJeq096vOVH6uyctVMEytuGzQ5lZTcWix3Gxd3QQ9xZ+35Okm2Cxz/ft7gnZNSMmZhH5PlJ4SHhPwSp6yBbExDpYyM4KeUqdrPq5vl/aU6oz+Mo66LD+ov5ir7stk7fYci3KV7ZXxlcqYM8/8nm8L4RQnY/x3MXIn5enVZP3WZS8TPEdWMMXdaeZfR/TOCi552XhNoazyxj88RJsLlyC2sIlqC9cgq2FS7C9cAl2Fi7B7sIlqGZ3li5ShuoSyLD4yFjNjY28vrP7QpIsPkZWc6NkzdqPeW5J1nPtkyWpvpi3VpbCYyvU5uWQYxk8F+VYfGbDciyD71bo7ublkGPxuQ7LsfiMp6qeSVoOOZYj+1mODKiyJFlQZUkyocqUbOgl5ViOeJqfD80jhwu31yHsvST/ehy0IYTk7bi2RXjnh/tESJxCkm5wlY2fF3NbHsdJetqzR7uRZ87+c03VFMe6Oua7J+yVtRAradWx6+z2mbXLGM4uwStz7t5ACot3AvHuHz/NeCH46SF9t0gc65d6LewnhTaiZV0aw2E/2KWIYSTZLz6N26P9SL6/xN4tT+NNXQdgde1oXTaGnyZo0T4x7pja1ltRPZ3Cm7r8FdgQLulJAbYYfb9DSXSzlUa0cz2aoB1eWbz0/vIN/eZnSXRPGwjf33rnaElfS6gBVxtHGc5c41Uo22wSV1dO4o2Vk3hz5SSueRJv0B0yaakNPiW5ofhR6U1sDGNRHGdHIxOD/ThkR2cDjT0Z65eMPz1r8O/p3qbwnpEYhV0ubF8c57YPR6ehGoH8FhqcXwa15t6jmMbbZflJ7tvILlucxi77lsZQfu7SHmHjFDwus23F7nr0sX6O81R5yu4ceYp9f1aRrRTZSpGtFNnKskpcZCtFtlJkK3+HbMXsks2TrewU2UqRrSxxtrJBd5zlR/n61Civz84pMpcicykylyJzKTKXZclcqnNkLvPtB+mR7HlzliJj+dkzlucZj3DPfrvIVFZK4tXPVBYtcZGdFNnJvNmJC3FPO7HPI3ZhsTxG39U3/66PC9dnQGi8vuc35OBTcnaDY5Q+hcB+4tysyqQoJPUrn58+IZ9zKcOnRPOp8TmxO8oYWMKe8gyfT4rKLq+fI/MtJE6BFtKmOjrik9VCfZd2DOeWidG6NM0cvs0E32aUlm2gm9Vit8+GGyr/5C8bLgWffYDnJIVtj+PcMg2AX1rYSlDSp/Bt+BOd6dGjHoln5C6FXX+o1zjOLTNN5pDCl7k5VeamJ7OLNc/fhiXNU4Eo0ZAiTyOzALudIc6vZz+j+gpWhOcUPSRqjVPamXsM7+fwcR5uBn2hxlrfs1NUfpviJxiFFPgcJ2qSx72xygUmwpyRHscizo3kTxfb89fIi9hexPYithexvYjtLxvbfRhn86cQSW4ojjGNe83vCDDzAXONV4ekt290p755T0AMqmuOwcx5izzn1lf47pyBGKqI+xAdjfTzMvOc8fk+i95mXopWuwljx6bgGTfC0AJwTKuJV2ILxj8e3fRZbzEu9myZfWSDuOo3dRi++hRAzc0uOesZictwlu6PnM/6s5xWWs6xbdfyuayebeNv90mUGCxVmn1M91fqPT4lge9m0if461MEq4QZZiXGgs9zcSmwHn26mtuuLllI3qlqePqlOZmN9zfwnQQbKn9z8ZLeJcSxyXipgU0/LeprJhmPOFo/vq2m6aSjqdOoj+ZRID5PW0hxROv8PRVZsJz9fgVjU+acZeQ6a6n4qcJt9QtlQW7xk4XPgc9poC0NRXs7J98cZe1ti3+CBWDM/U6wtTX05BLQrK1dQWwpgW6+i1/Wvipb4dNZEQutWkM8n/T4y1prDfsSy/IZOnhq7e8UF7oAu6FIxSfP/Et5iS+LpHyoT32CEDxxlbXGUeVKedGI4gDrIvX+n9koS6pGnC/ckRb5pBF+956JYjwXcE/uLGVWl8J+ys7k5Rbq3RXG6Te7pWi0FYYn9PqUZWW3T6e9CeUB9tmu5SjMj18u1M0cytEsw6yS8phzJ/SJweaarYd/+5FtSG1uQ00X8EEbC8+ECikk+XVLjQUmY/Wh0vFRrBvf1ojccdQ1MVj3gJGZr9OtK3u5WjnI5T5k72M7VvOpcE8576Sla1XK97FyEoMaO8hyZH1KpA/VdGxV7oqAi0FIWnbGm1a67/ViyInIf/fgnoqFsTdf/gW9PWit
)

size := StringBase64ToData(var, outData)
varsetcapacity(var1, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, &amp;var1, Ptr, &amp;outData, Ptr, 32)
varsetcapacity(var2, size-32)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, &amp;var2, Ptr, &amp;outData+32, Ptr, size-32)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, &amp;var1+32, Ptr, &amp;var2, Ptr, size-32)
msgbox % Base64Enc(var1, size)

Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;, &amp;Bin ,&quot;UInt&quot;, nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Ptr&quot;,0,&quot;UIntP&quot;,Rqd )
   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;,&amp;Bin, &quot;UInt&quot;,nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Str&quot;,B64, &quot;UIntP&quot;,Rqd )
   Return B64
}

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes)
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}</code></pre></div><p>С первым вопросом разобрался:<br /></p><div class="codebox"><pre><code>var =
( Join
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
)

size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)

oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := 1 ; bin
ADO.Mode := 3
oADO.Open
oADO.Write(arr)
oADO.Position := 0
aBin := oADO.Read(size)
oADO.Close

varsetcapacity(a, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, &amp;a, Ptr, NumGet( ComObjValue(abin) + 8 + A_PtrSize ), Ptr, size)
msgbox % Base64Enc(a, size)


Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;, &amp;Bin ,&quot;UInt&quot;, nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Ptr&quot;,0,&quot;UIntP&quot;,Rqd )
   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;,&amp;Bin, &quot;UInt&quot;,nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Str&quot;,B64, &quot;UIntP&quot;,Rqd )
   Return B64
}

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes)
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 11 Sep 2018 20:09:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128652#p128652</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128651#p128651</link>
			<description><![CDATA[<p>Не пойму цель этих манипуляций. У нас ведь уже есть Base64, зачем снова запаковывать?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 11 Sep 2018 20:03:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128651#p128651</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128647#p128647</link>
			<description><![CDATA[<p>Теперь новая проблема - как обратно закодировать в base64?<br />С fileread и с fileopen всё получается - начальный и конечный результаты одинаковые.<br />С oADO.Read результат другой. <br />Во что нужно перепаковать полученные &quot;data as a variant&quot; для использования в качестве &quot;pointer to the array of bytes to be converted into a string&quot;?<br />А с oADO.ReadText() последний символ заменяется на NULL, непонятно почему?<br /></p><div class="codebox"><pre><code>var =
( Join
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
)

size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)
oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := 1 ; bin
ADO.Mode := 3
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(&quot;test&quot;, 2)
oADO.Position := 0
aBin := oADO.Read(size)

oADO.Position := 0
oADO.Type := 2 ; text
oADO.Charset := &quot;utf-16&quot; 
aText := oADO.ReadText()
oADO.Close

fileread, b, *c test

file := FileOpen(&quot;test&quot;, &quot;r&quot;, &quot;utf-16&quot;)
File.RawRead(c, size)

msgbox % Base64Enc(aBin, size)
msgbox % Base64Enc(aText, size)
msgbox % Base64Enc(b, size)
msgbox % Base64Enc(c, size)




Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;, &amp;Bin ,&quot;UInt&quot;, nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Ptr&quot;,0,&quot;UIntP&quot;,Rqd )
   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
   DllCall( &quot;Crypt32.dll\CryptBinaryToString&quot;, &quot;Ptr&quot;,&amp;Bin, &quot;UInt&quot;,nBytes, &quot;UInt&quot;,0x1|0x40000000, &quot;Str&quot;,B64, &quot;UIntP&quot;,Rqd )
   Return B64
}

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes)
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 11 Sep 2018 19:44:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128647#p128647</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128613#p128613</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Так это тоже самое</p></blockquote></div><p>Нет, здесь в струтуре SAFEARRAY <em>заменяется</em> указатель pvData на новый, а я, наоборот, использую указатель, который записался при создании структуры, и копирую по этому адресу свои данные.<br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Ты знаешь для чего Coco этот флаг убирает?</p></blockquote></div><p>Вот <a href="https://autohotkey.com/docs/commands/ComObjFlags.htm#Flags">здесь</a> описано.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 10 Sep 2018 12:45:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128613#p128613</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128611#p128611</link>
			<description><![CDATA[<p>Так это тоже самое, что и <br /></p><div class="codebox"><pre><code>ByteArray(ByRef src, bytes, copy:=false)
{
	ByteArr := ComObjArray(0x11, bytes) ; VT_ARRAY|VT_UI1
	ComObjFlags(ByteArr, -1) ; Remove F_OWNVALUE flag
	NumPut(IsByRef(src) ? &amp;src : src, ComObjValue(ByteArr) + 12 + (A_PtrSize==8 ? 4 : 0))
	return copy ? ByteArr.Clone() : ByteArr
}</code></pre></div><p>только без <br /></p><div class="codebox"><pre><code>ComObjFlags(ByteArr, -1) ; Remove F_OWNVALUE flag</code></pre></div><p>Ты знаешь для чего <strong>Coco</strong> этот флаг убирает?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 10 Sep 2018 11:54:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128611#p128611</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128582#p128582</link>
			<description><![CDATA[<p>Ещё вот так можно:<br /></p><div class="codebox"><pre><code>var := &quot;PHQ+0J/RgNC40LzQtdGAINC00LXQutC+0LTQuNGA0L7QstCw0L3QuNGPIGJhc2U2NDwvdD4=&quot;
size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall(&quot;Ntdll\RtlMoveMemory&quot;, Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &amp;outData, Ptr, size)

oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := adTypeBinary := 1
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(A_ScriptDir . &quot;\test.txt&quot;, adSaveCreateOverWrite := 2)
oADO.Close

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes) 
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 09 Sep 2018 12:40:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128582#p128582</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128556#p128556</link>
			<description><![CDATA[<p>Не знаю, наверно не совсем правильный механизм создания. Я настолько глубоко тему не знаю. Но вот там ниже lexicos пишет:<br /></p><div class="quotebox"><blockquote><p>If what you need is an array of bytes -- not a mechanism for reading/writing a pre-existing pointer -- it would be more appropriate to just call ComObjArray() and copy the data in.</p></blockquote></div><p>что я и делаю.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 08 Sep 2018 12:50:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128556#p128556</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ADODB.Stream не понимает Base64 из CryptStringToBinary]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128552#p128552</link>
			<description><![CDATA[<p>Спасибо!<br />Я уже натыкался на подобную функцию, но у меня она не сработала.<br />Не знаешь почему?<br /></p><div class="codebox"><pre><code>var := &quot;PHQ+0J/RgNC40LzQtdGAINC00LXQutC+0LTQuNGA0L7QstCw0L3QuNGPIGJhc2U2NDwvdD4=&quot;
size := StringBase64ToData(var, outData)
arr := ByteArray(&amp;outData, size)



oADO := ComObjCreate(&quot;ADODB.Stream&quot;)
oADO.Type := adTypeBinary := 1
oADO.Open
oADO.Write(arr)
oADO.SaveToFile(A_ScriptDir . &quot;\test.txt&quot;, adSaveCreateOverWrite := 2)
oADO.Close

StringBase64ToData(stringBase64, ByRef outData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(outData, bytes) 
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, Ptr, &amp;stringBase64, UInt, StrLen(stringBase64)
                                        , UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
   Return bytes
}


ByteArray(ByRef src, bytes, copy:=false)
{
	ByteArr := ComObjArray(0x11, bytes) ; VT_ARRAY|VT_UI1
	ComObjFlags(ByteArr, -1) ; Remove F_OWNVALUE flag
	NumPut(IsByRef(src) ? &amp;src : src, ComObjValue(ByteArr) + 12 + (A_PtrSize==8 ? 4 : 0))
	return copy ? ByteArr.Clone() : ByteArr
}</code></pre></div><p><a href="https://autohotkey.com/boards/viewtopic.php?t=6967">https://autohotkey.com/boards/viewtopic.php?t=6967</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sat, 08 Sep 2018 11:33:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128552#p128552</guid>
		</item>
	</channel>
</rss>
