vbscript上的aes/rijndael的自定义键
问题描述:
我正在开发一个向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
答
几天调查后,我会后我终于做到了。我知道这是不是一个好的做法,我会很快改变,但是这没关系,现在。
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
我建议你了解KDFs,否则你会在这里犯一些安全错误。 –
如果客户端在Java中,为什么服务器使用经典ASP VBScript编写? – BoffinbraiN