2009-08-12 10 views
0

URLにいくつかのパラメータを渡す必要がある状況があります。 URLにid = 1を持たないために、単純な暗号化方法を追加して値を難読化しました。これは.Netの土地でうまくいきました。しかし、私は古典的なASPページからこのネットページに、パラメータを暗号化することを期待している必要があります。私は暗号化や古典的なASPにあまり慣れていないし、誰かが私を良いJSライブラリに導くことを望んでいたのだろうか、単にこの関数の古典的なaspバージョンを提供するだろうか? .Netコードに何か問題がある場合は、その点についてもフィードバックをいただきたいと思います。スニペットをc#からvbscriptに変換する

は、ここでの暗号化方式です:

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 ""; 
    } 
} 

ありがとう!

答えて

0

自分の質問に答えるつもりはありませんが、コードをコメントとして追加できませんでした。とにかく、私はクライアントに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 
7

これは単純な翻訳ではありません。従来のASPでは.NET Frameworkにアクセスできません。これをWin32コードで行う必要があります。

C#コードをCOMコンポーネントとしてパッケージ化し、Classic ASPサイトからアクセスする必要があります。

+0

感謝。ある時点でこれを行うことを検討しましたが、IIS x64で実行しているときにカスタムCOMコンポーネントにアクセスする際に問題が発生しました。これは誰でも確認できますか?x64で実装するための特別な考慮事項があるかどうか –

+0

x64でカスタムCOM +コンポーネントにアクセスできます。彼らがカスタムステップであるかどうかはわかりませんが、可能です。私たちはそれを行ういくつかのレガシーコードを持っています。 – Jab

+0

コンパイルオプションに進み、詳細設定でCPUターゲットをx64に具体的に設定し、COM相互運用機能に登録するように設定されていることを確認します。 私はそれをやった後もまだ問題がありません。また、.NETのデプロイメントを使用すると、DLLを登録する際の方がうまくいくことがわかりました。ただし、手動でregasmコマンドを参照してBATファイルも作成しました。 – RiddlerDev

1

私はこのサイトにASP & VB.NETを使用していました。また、社内のユーティリティプログラムは、C#、VB6 & VB.NETで書かれています。すべてのプログラムが暗号化されたデータを交換できる必要がありました。

この問題を処理するために、VB6 & VBScript暗号化ルーチンを.NETに変換しました。それは私がプラットフォーム間で同じデータを持つことができます。私が選択した暗号化&はRC4とMD5でした。どちらもMD5が塩漬けのバージョンで、RC4にCRCチェックが含まれ、複数のパスキーを使用して二重暗号化するオプションなど、複数の機能が大幅に強化されています。

最小限の機密データ用です。非常に敏感なデータについては、私はDES-3暗号化を行うVB6 DLLを書きました。このDLLは、すべてのプラットフォームで使用できるようになります。

別の暗号化方法を使用してパスワード用のハードウェアパラメータを使用して暗号化されたパスワードキーをレジストリに入れます。 (レジストリからレジストリを取り出して別のシステムに配置しようとすると、問題ありません)

+0

現実的なアプローチのように聞こえますが、私のニーズには今のところすべてが包括されています。私はそれをすべて実装する必要のないものを見つけることを願っていましたが、フィードバックにも感謝しています! –