#vbscript #asp-classic
#vbscript — файл #asp-классический #vbscript
Вопрос:
Как я могу расшифровать строку в классическом ASP / VBScript? Строка взята из php-приложения, которое использует шифрование 3DES.
Ответ №1:
У меня есть Javascript-реализация DES / TripleDES. Он поддерживает режимы CBC и ECB, а для заполнения поддерживает PKCS7, пробелы или нули. Он интегрирован с PBKDF2, совместимым с RFC2898, так что он может генерировать ключи шифрования и IV из паролей, если хотите. Вы также можете явно задать ключ шифрования и IV.
Его можно использовать при вызове непосредственно из Javascript — любого браузера, или из Rhino, или WScript.exe , или, может быть, ближе к вашему случаю, классический ASP с использованием Javascript.
Я также упаковал его как COM-компонент, поэтому его можно вызвать из любой COM-совместимой среды, такой как VBScript, работающий в классическом ASP, или Perl, или VBA, и т.д.
Это независимая реализация, которая полностью совместима с .NET DESCryptoServiceProvider и TripleDESCryptoServiceProvider и совместима с ними.
Получите это здесь: http://cheeso.members.winisp.net/srcview.aspx?dir=DES
При вызове его непосредственно из Javascript это выглядит следующим образом:
var pbkdf2 = new PBKDF2(password, salt, iterations);
var key = pbkdf2.deriveBytes(8); // use 24 for 3DES
var iv = pbkdf2.deriveBytes(8); // always 8 (==blocksize)
var des = new DES(key,iv);
var plaintext = "Hello. This is a test. of the emergency broadcasting system.";
var ciphertext = des.encrypt(plaintext);
При вызове COM-компонента из VBScript это выглядит следующим образом:
Dim des
set des = CreateObject("Ionic.Com.DES")
des.Password = "This is my password"
des.Mode = "CBC"
des.TripleDES = True
des.Rfc2898Iterations = 1000
Dim result
result = des.EncryptString(plainText)
Dim decrypted
decrypted = des.DecryptBytes(result)
WScript.echo "decrypted : " amp; decrypted
Шифрование выполняется довольно быстро, но генерация ключа — нет.
Редактировать:
вы также можете использовать содержимое Javascript DES в браузере.
вот пример: http://jsbin.com/oguye3
Комментарии:
1. Привет, Чизо, у тебя есть какая-нибудь рабочая ссылка для cheeso.members.winisp.net/srcview.aspx?dir=DES ?. Заранее спасибо
2. @NicoGrunfeld это недоступно на машине Wayback web.archive.org (там есть только страница, но нет ссылок на исходные файлы). Аналогичная реализация JavaScript находится здесь: web.archive.org/web/20151002201926/http://www.laynetworks.com /…
Ответ №2:
Я бы попробовал использовать CAPICOM от Microsoft. В комплект SDK входят примеры, которые помогут вам начать работу.
Старый обзор:
http://msdn.microsoft.com/en-us/library/ms995332.aspx
CAPICOM SDK:
http://www.microsoft.com/downloads/en/details.aspx ?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6
Пример, с которым вы захотите ознакомиться, находится здесь, на моем компьютере:
C:Program Файлы (x86) Microsoft CAPICOM 2.1.0.2 SDKSampleshtmlEncryptedData.htm
Ответ №3:
Здесь есть тройная реализация JavaScript:http://www.tero.co.uk/des /. Он работает как JScript (классическая версия JavaScript от Microsoft для ASP, в основном ECMAScript 3), проверяется на PHP, поддерживает EBC и CBC, заполнение (нули, PKCS7 (багги) или пробелы), а также выполняет обычный DES. Вы можете использовать это на классической странице ASP VBScript, подобной этой:
<%@ Language=VBScript %>
<script language="JScript" runat="server">
PASTE DES JAVASCRIPT SOURCE HERE, or include by adding src="..." in previous line
</script>
<%
key = "this is a 24 byte key !!"
message = "This is a test message."
' Use TripleDES (24-byte key) in ECB mode (0, Null iv) with 0 padding
encrypted = des(key, message, 1, 0, Null, 0)
decrypted = des(key, encrypted, 0, 0, Null, 0)
Response.Write "<PRE>"
Response.Write "Key: " amp; key amp; vbCrLf
Response.Write "Message(length=" amp; Len(message) amp; "): " amp; message amp; vbCrLf
Response.Write "Encrypted 3DES ECB: " amp; stringToHex(encrypted) amp; vbCrLf
Response.Write "Decrypted 3DES ECB: " amp; decrypted
Response.Write "</PRE>"
%>
В результате:
Key: this is a 24 byte key !!
Message(length=23): This is a test message.
Encrypted 3DES ECB: 0x83af8c3f5507e100b182f90f5f5d834b085ca8439b35eee4
Decrypted 3DES ECB: This is a test message.
Если вы используете заполнение PKCS7, обратите внимание, что в коде JavaScript: padding есть ошибка. Начальный if (padding ==
блок должен быть заключен в if (encrypt) {...}
тест, а последние две строки des() следует заменить на:
result = tempresu<
//when decrypting, remove padding for PKCS7 but leave space/zero padding (cannot be distinguished from real trailing spaces/zeroes)
if (!encrypt) {
if (padding == 1) {temp = result.charCodeAt(result.length-1); result = result.substring(0,result.length-temp);} //PKCS7 padding
}
//return the result as an array
return resu<