2009-08-12 11 views
0

J'ai donc une situation où je dois passer certains paramètres sur l'URL. Afin de ne pas avoir id = 1 sur l'URL, j'ai ajouté une méthode de cryptage simple pour obfusciter les valeurs. Cela a bien fonctionné dans le pays .Net. Maintenant, cependant, je dois diriger d'une page ASP classique à cette page .net qui attend les paramètres à crypter. Je ne suis pas vraiment familier avec le cryptage ou asp classique et espérais que quelqu'un serait en mesure de me diriger vers une bonne librairie JS, ou simplement fournir une version classique de cette fonction? S'il y a quelque chose qui ne va pas avec le code .Net, j'aimerais avoir des commentaires à ce sujet.Convertir un extrait de C# en vbscript

est ici la méthode de cryptage:

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

Et voici la méthode de décryptage (je en ai besoin pour décrypter le asp classique texte crypté):

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

Merci pour toute aide!

Répondre

0

Ne pas vouloir répondre à ma propre question, mais je n'ai pas pu obtenir le code ajouté comme commentaire . Quoi qu'il en soit, j'ai fini par mettre en œuvre RC4 sur le client de toute façon. Pour toute personne qui pourrait être intéressée (wth faites-vous travailler en ASP classique :) :)) Voici le code pertinent - espérons que cela aide! Comme toujours, si quelqu'un remarque un problème avec cet extrait, s'il vous plaît faites le moi savoir!

Merci,

Matt

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

Ce n'est pas une simple traduction! ASP classique n'a pas accès au .NET Framework. Vous auriez besoin de faire tout cela dans le code Win32.

Vous devez empaqueter le code C# ensemble en tant que composant COM, auquel vous pouvez accéder à partir du site ASP classique.

+0

Merci pour l'entrée. J'ai envisagé de le faire à un moment donné, mais j'ai rencontré des problèmes lors de l'exécution de composants COM personnalisés sous IIS x64. Quelqu'un peut-il confirmer que c'est ou n'est pas faisable, et s'il y a des considérations spéciales pour la mise en œuvre sous x64? –

+0

Vous pouvez accéder aux composants COM + personnalisés dans x64. Je ne sais pas si ce sont des étapes personnalisées, mais c'est possible. Nous avons un code hérité qui le fait. – Jab

+0

Allez dans vos options de compilation et sous essai avancé pour le ciblage de processeur x64 spécifiquement et ensuite assurez-vous qu'il est configuré pour s'enregistrer pour COM Interop. Je n'ai pas encore eu de problème une fois que j'ai fait cela. J'ai également trouvé que l'utilisation d'un déploiement .NET fonctionne mieux à l'enregistrement des DLL, bien que j'ai également créé des fichiers BAT, en référençant les commandes regasm manuellement. – RiddlerDev

1

J'ai couru dans celui-ci sur notre site qui utilise ASP & VB.NET. En outre, les programmes utilitaires internes sont écrits en C#, VB6 & VB.NET. Tous les programmes devaient pouvoir échanger des données cryptées.

Pour résoudre ce problème, j'ai écrit une routine de chiffrement VBScript VB6 & que j'ai convertie en .NET. Cela me permet d'avoir des données identiques sur toutes les plateformes. Le cryptage & hashing que j'ai sélectionné étaient RC4 et MD5. Les deux ont été considérablement améliorés avec des fonctionnalités multiples, comme le MD5 est une version salée et le RC4 contient une vérification CRC et une option pour le double chiffrement en utilisant plusieurs clés de passe.

Ceci est pour les données à sensibilité minimale. Pour les données qui sont très sensibles, j'ai écrit une DLL VB6 qui fait un chiffrement DES-3. Cette DLL est ensuite mise à la disposition de toutes les plateformes.

Je mets les mots de passe dans le registre, cryptés en utilisant des paramètres matériels pour le mot de passe en utilisant une autre méthode de cryptage. (Si vous les obtenez du registre et essayez de les mettre sur un autre système, ils ne sont pas bons.)

+0

Semble comme une approche raisonnable, juste un peu englobant pour mes besoins actuellement. J'espérais trouver quelque chose qui ne m'obligeait pas à mettre en œuvre tout cela - mais merci pour les commentaires aussi! –