2017-08-04 3 views
1

Ich arbeite an einem JAVA-Programm, das Anfragen an eine ASP-Datei macht und es funktioniert gut.Benutzerdefinierter Schlüssel für AES/Rijndael auf VBScript

Jetzt möchte ich POST-Anfragen verschlüsseln, aber ich muss den gleichen Schlüssel für die Verschlüsselung auf JAVA und ASP für die Entschlüsselung richtig verwenden (oder das ist, was ich denke).

Wie kann ich einen Schlüssel aus einem String in VBScript generieren? Und muss ich die IV anpassen? Ich weiß nicht, was das ist :(

(ich nie etwas verschlüsselt, ich bin neu in diesem)

set obj = server.CreateObject("System.Security.Cryptography.RijndaelManaged") 
set utf = CreateObject("System.Text.UTF8Encoding") 
s="This is a private message" 
bytes=utf.GetBytes_4(s) 
obj.GenerateKey() 'need to custom this 
obj.GenerateIV() 'need to custom this? 
set enc=obj.CreateEncryptor() 
set dec=obj.CreateDecryptor() 

bytec=enc.TransformFinalBlock((bytes),0,lenb(bytes)) 
sc=utf.GetString((bytec)) 
response.write sc 

byted=dec.TransformFinalBlock((bytec),0,lenb(bytec)) 
sd=utf.GetString((byted)) 
response.write sd 
+0

Ich schlage vor, Sie lernen über KDFs oder sonst werden Sie hier einige Sicherheitsfehler machen. –

+0

Warum wird der Server in Classic ASP VBScript geschrieben, wenn der Client in Java ist? – BoffinbraiN

Antwort

1

Nach ein paar Tagen zu untersuchen, werde ich schreiben, was ich tat schließlich. I wissen, dass nicht eine gute Praxis ist, und ich werde es bald ändern, aber es ist okay für jetzt.

ASP CODE

response.write desencriptar(encryptedStringHere) 

Function desencriptar(str) 
    set obj= CreateObject("System.Security.Cryptography.RijndaelManaged") 
    set utf8 = CreateObject("System.Text.UTF8Encoding") 
    ekey = "16byteskeyhere" 'you'll need to change this 
    eiv = "16bytesIVhere" 'you'll need to change this 
    obj.BlockSize = 128 
    obj.Key = utf8.GetBytes_4(ekey) 
    obj.IV = utf8.GetBytes_4(eiv) 
    obj.Padding = 5 
    set decryptor=obj.CreateDecryptor() 
    desencriptado = Base64ToByte(str) 
    byted=decryptor.TransformFinalBlock((desencriptado),0,lenb(desencriptado)) 
    desencriptado = utf8.getString((byted)) 
    desencriptar = desencriptado 
end function 

Function Base64ToByte(ByVal vCode) 
    Dim oXML, oNode 
    Set oXML = CreateObject("Msxml2.DOMDocument.3.0") 
    Set oNode = oXML.CreateElement("base64") 
    oNode.dataType = "bin.base64" 
    oNode.text = vCode 
    Base64ToByte = oNode.nodeTypedValue 
    Set oNode = Nothing 
    Set oXML = Nothing 
End Function 

Java-Code (Verschlüsselungsfunktion)

(Java-Anfrage dechiffriert)
public static String aesEncrypt(String value, String key, String initVector) { 
    try { 
     IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); 
     SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "Rijndael"); 
     Cipher cipher = Cipher.getInstance("Rijndael/CBC/PKCS5PADDING"); 
     cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); 
     byte[] encrypted = cipher.doFinal(value.getBytes()); 
     return Base64.getEncoder().encodeToString(encrypted); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return null; 
} 

Docs: RijndaelManaged | PaddingMode | CipherMode

Verwandte Themen