[英]Convert snippet from c# to vbscript
所以我有一種情況,我需要在url上傳遞一些參數。 為了使URL上沒有id = 1,我添加了一種簡單的加密方法來混淆值。 在.Net范圍內,此方法運行良好。 但是,現在,我需要從經典的ASP頁面定向到該.net頁面,該頁面希望對參數進行加密。 我真的對加密或經典ASP不太熟悉,希望有人能夠將我定向到一個好的JS庫,或者只是提供此功能的經典ASP版本? 如果.Net代碼有任何問題,我也希望聽聽對此的反饋。
這是加密方法:
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組件,然后可以從Classic ASP站點進行訪問。
我在我們使用ASP和VB.NET的網站上遇到了這個問題。 而且,內部實用程序是用C#,VB6和VB.NET編寫的。 所有程序都需要能夠交換加密的數據。
為了解決這個問題,我編寫了一個VB6和VBScript加密例程,並將其轉換為.NET。 它使我可以跨平台擁有相同的數據。 我選擇的加密和哈希是RC4和MD5。 兩者都通過多種功能得到了顯着增強,例如MD5是加鹽版,RC4包含CRC檢查和使用多個密鑰進行雙重加密的選項。
這是用於最小敏感數據的。 對於非常敏感的數據,我編寫了一個進行DES-3加密的VB6 DLL。 然后,此DLL可用於所有平台。
我將密碼放在注冊表中,並使用另一種加密方法使用密碼的硬件參數對其進行加密。 (如果您從注冊表中獲取它們並嘗試將它們放在另一個系統上,那么它們就不好了。)
並不是要回答我自己的問題,但我無法將代碼添加為注釋。 無論如何,我最終還是在客戶端上實現了RC4。 對於任何有興趣的人(您正在用經典asp做什么? 與往常一樣,如果有人發現此代碼段有問題,請告訴我!
謝謝,
馬特
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.