经典ASP中的三重DES解密?

时间:2011-04-21 21:15:03

标签: vbscript asp-classic

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

3 个答案:

答案 0 :(得分:4)

我有一个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并可与之互操作。

在此处获取: 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);

从VBScript调用COM组件时,它看起来像这样:

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

答案 1 :(得分:0)

我会尝试使用Microsoft的CAPICOM。 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

答案 2 :(得分:0)

这里有一个TripleDES JavaScript实现:http://www.tero.co.uk/des/。它可以作为JScript(微软的经典ASP版本的JavaScript,基本上是ECMAScript 3),针对PHP进行检查,支持EBC和CBC,填充(零,PKCS7(错误)或空格),也可以进行简单的DES。您可以在Classic ASP VBScript页面中使用它,如下所示:

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.

导致:

if (padding ==

如果您使用PKCS7填充,请注意JavaScript:填充代码中存在错误。最初的if (encrypt) {...}块应该包含在 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; 测试中,des()的最后两行应该替换为:

rank