Тройной дешифрование DES в классическом ASP? - PullRequest
4 голосов
/ 22 апреля 2011

Как мне расшифровать строку в classic-ASP / VBScript? Строка взята из приложения php, использующего шифрование 3DES.

Ответы [ 3 ]

4 голосов
/ 22 апреля 2011

У меня есть реализация Javascript DES / TripleDES. Это делает режимы CBC и ECB, и для дополнения поддерживает PKCS7, пробелы или нули. Он интегрирован с RFC2898-совместимым PBKDF2, поэтому он может генерировать ключи шифрования и 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       : " & decrypted

Шифрование выполняется довольно быстро, но генерация ключей - нет.


Редактировать:

вы также можете использовать Javascript DES в браузере.
Вот пример: http://jsbin.com/oguye3

0 голосов
/ 26 апреля 2018

Здесь есть реализация TripleDES JavaScript: http://www.tero.co.uk/des/. Он работает как JScript (классическая ASP-версия Microsoft для JavaScript, в основном ECMAScript 3), проверяется на PHP, поддерживает EBC и CBC, заполнение (нули, PKCS7 (глючит)) или пробелы), а также делает простой DES.Вы можете использовать его на странице классического ASP VBScript следующим образом:

<%@ Language=VBScript %>

   PASTE DES JAVASCRIPT SOURCE HERE, or include by adding src="..." in previous line 

<%
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: " & key & vbCrLf
Response.Write "Message(length=" & Len(message) & "): " & message & vbCrLf
Response.Write "Encrypted 3DES ECB: " & stringToHex(encrypted) & vbCrLf
Response.Write "Decrypted 3DES ECB: " & decrypted
Response.Write "
"%>

В результате:

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 += tempresult;

  //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 result;
0 голосов
/ 22 апреля 2011

Я бы попробовал использовать 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 Files (x86) \ Microsoft CAPICOM 2.1.0.2 SDK \ Samples \ html \ EncryptedData.htm

...