C# 将代码段从c转换为vbscript
所以我需要在url上传递一些参数。为了不让url上的id=1,我添加了一个简单的加密方法来混淆这些值。这在.Net领域中运行良好。但是,现在我需要从一个经典的asp页面直接转到这个.net页面,该页面希望对参数进行加密。我真的不太熟悉加密或经典的asp,希望有人能告诉我一个好的JS库,或只是提供一个经典的asp版本的这个功能?如果.Net代码有什么问题,我也很乐意听到反馈 以下是加密方法:C# 将代码段从c转换为vbscript,c#,asp.net,encryption,asp-classic,C#,Asp.net,Encryption,Asp Classic,所以我需要在url上传递一些参数。为了不让url上的id=1,我添加了一个简单的加密方法来混淆这些值。这在.Net领域中运行良好。但是,现在我需要从一个经典的asp页面直接转到这个.net页面,该页面希望对参数进行加密。我真的不太熟悉加密或经典的asp,希望有人能告诉我一个好的JS库,或只是提供一个经典的asp版本的这个功能?如果.Net代码有什么问题,我也很乐意听到反馈 以下是加密方法: public static string Encrypt(string Input) { try
public static string Encrypt(string Input)
{
try
{
key = Encoding.UTF8.GetBytes(EncryptionKey.Substring(0, 8));
var des = new DESCryptoServiceProvider();
Byte[] inputByteArray = Encoding.UTF8.GetBytes(Input);
var ms = new MemoryStream();
var cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception)
{
return "";
}
}
这是解密方法,我需要它来解密经典的asp加密文本:
public static string Decrypt(string Input)
{
try
{
key = Encoding.UTF8.GetBytes(EncryptionKey.Substring(0, 8));
var des = new DESCryptoServiceProvider();
var inputByteArray = Convert.FromBase64String(Input);
var ms = new MemoryStream();
var cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
Encoding encoding = Encoding.UTF8;
return encoding.GetString(ms.ToArray());
}
catch (Exception)
{
return "";
}
}
谢谢你的帮助 这不是简单的翻译!经典ASP无法访问.NET Framework。您需要在Win32代码中完成所有这些操作
您应该将C代码打包为一个COM组件,然后可以从经典的ASP站点访问它。我在使用ASP&VB.NET的站点上遇到了这个组件。此外,内部实用程序是用C、VB6和VB.NET编写的。所有程序都需要能够交换加密数据 为了解决这个问题,我编写了一个VB6&VBScript加密例程,并将其转换为.NET。它允许我跨平台拥有相同的数据。我选择的加密和哈希是RC4和MD5。这两个版本都通过多种功能得到了极大的增强,例如MD5是salt版本,RC4包含CRC检查和使用多个密钥进行双重加密的选项 这是针对敏感度最低的数据。对于非常敏感的数据,我编写了一个VB6 DLL,它执行DES-3加密。然后,所有平台都可以使用此DLL
我将密钥放在注册表中,使用另一种加密方法对密码的硬件参数进行加密。如果您从注册表中获取这些代码并尝试将它们放在另一个系统上,则它们是不好的。并非要回答我自己的问题,但我无法将代码添加为注释。无论如何,我最终还是在客户端实现了RC4。对于可能感兴趣的任何人,您是否在经典asp中工作??:以下是相关代码-希望对您有所帮助!和往常一样,如果有人发现这个片段有问题,请告诉我 谢谢 马特
谢谢你的意见。我曾考虑过这样做,但在IIS x64下运行时,访问自定义com组件时遇到问题。是否有人可以确认这是否可行,以及在x64下实现是否有任何特殊考虑?您可以访问x64中的自定义COM+组件。我不知道它们是否是自定义步骤,但这是可能的。我们有一些遗留代码来完成这项工作。进入编译选项,在“高级”下,专门针对x64的CPU进行尝试,然后确保它设置为注册COM互操作。一旦我这样做了,我还没有遇到问题。此外,我还发现使用.NET部署可以更好地注册DLL,尽管我也创建了BAT文件,手动引用了regasm命令。感谢提供的其他信息,我一定会尝试并发布结果。虽然我最终没有进行此更改,我觉得这最终可能是最好的解决方案。听起来是一个明智的方法,只是有点全面满足我目前的需求。我希望能找到一些不需要我来实现所有这些的东西——但也谢谢你的反馈!
Dim sbox(255)
Dim key(255)
Sub RC4Initialize(strPwd)
dim tempSwap
dim a
dim b
intLength = len(strPwd)
For a = 0 To 255
key(a) = asc(mid(strpwd, (a mod intLength)+1, 1))
sbox(a) = a
next
b = 0
For a = 0 To 255
b = (b + sbox(a) + key(a)) Mod 256
tempSwap = sbox(a)
sbox(a) = sbox(b)
sbox(b) = tempSwap
Next
End Sub
Function EnDeCrypt(plaintxt)
dim temp
dim a
dim i
dim j
dim k
dim cipherby
dim cipher
i = 0
j = 0
RC4Initialize "somesortofpassword"
For a = 1 To Len(plaintxt)
i = (i + 1) Mod 256
j = (j + sbox(i)) Mod 256
temp = sbox(i)
sbox(i) = sbox(j)
sbox(j) = temp
k = sbox((sbox(i) + sbox(j)) Mod 256)
cipherby = Asc(Mid(plaintxt, a, 1)) Xor k
dim h
h = hex(cipherby)
if Len(h) = 1 then
h = "0" & h
end if
cipher = cipher & h
Next
EnDeCrypt = cipher
End Function