2017-08-04 91 views
1

我正在开发一个向asp文件发出请求并且工作正常的JAVA程序。vbscript上的aes/rijndael的自定义键

现在我想加密POST请求,但我需要使用相同的密钥在JAVA和ASP上进行加密才能正确解密(或者我认为是这样)。

如何从vbscript上的字符串生成密钥? 我需要自定义IV吗?我不知道那是什么:(

(我从来不加密的话,我是新来的这个)

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

我建议你了解KDFs,否则你会在这里犯一些安全错误。 –

+0

如果客户端在Java中,为什么服务器使用经典ASP VBScript编写? – BoffinbraiN

回答

1

几天调查后,我会后我终于做到了。我知道这是不是一个好的做法,我会很快改变,但是这没关系,现在。

ASP代码(解密java的要求)

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代码(加密功能)

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