Vbscript 经典ASP中的三重DES解密?

Vbscript 经典ASP中的三重DES解密?,vbscript,asp-classic,Vbscript,Asp Classic,如何在经典ASP/VBScript中解密字符串?字符串来自使用3DES加密的php应用程序。我会尝试使用Microsoft的CAPICOM。SDK中包含了一些示例,这些示例将使您受益匪浅 旧概览: CAPICOM SDK: 您要签出的示例位于我的计算机上: C:\Program Files(x86)\Microsoft CAPICOM 2.1.0.2 SDK\Samples\html\EncryptedData.htm我有一个DES/TripleDES的Javascript实现。它提供CBC

如何在经典ASP/VBScript中解密字符串?字符串来自使用3DES加密的php应用程序。

我会尝试使用Microsoft的CAPICOM。SDK中包含了一些示例,这些示例将使您受益匪浅

旧概览:

CAPICOM SDK:

您要签出的示例位于我的计算机上:


C:\Program Files(x86)\Microsoft CAPICOM 2.1.0.2 SDK\Samples\html\EncryptedData.htm

我有一个DES/TripleDES的Javascript实现。它提供CBC和ECB模式,以及 对于填充,支持PKCS7、空格或零。它与RFC2898兼容的PBKDF2集成,因此如果您愿意,它可以从密码生成加密密钥和IV。您还可以显式设置加密密钥和IV

当直接从Javascript调用时,它是可用的-任何浏览器,或从Rhino,或WScript.exe,或可能更接近您的情况,使用Javascript的经典ASP

我还将其打包为COM组件,因此可以从任何符合COM的环境调用它,如在经典ASP、Perl或VBA中运行的VBScript等

它是一个独立的实现,完全兼容.NET DESCryptoServiceProvider和TripleDESCryptoServiceProvider,并可与之互操作

在这里获取:

直接从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);
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
从VBScript调用COM组件时,如下所示:

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);
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内容。

下面是一个示例:

这里有一个TripleDES JavaScript实现:。它的工作原理是JScript(微软经典的ASP版JavaScript,基本上是ECMAScript 3),与PHP对照检查,支持EBC和CBC、填充(零、PKCS7(buggy)或空格),还支持纯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: " & 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 "</PRE>"
%>
如果使用PKCS7填充,请注意JavaScript:padding代码中有一个bug。初始的
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;

嗨,奇索,你有什么工作链接吗?谢谢advance@NicoGrunfeld在Wayback Machine web.archive.org上不可用(只有页面在那里,但没有引用的源文件)。类似的JavaScript实现如下: