Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将RijndaelManaged转换为Java_Java_.net_Vb.net - Fatal编程技术网

将RijndaelManaged转换为Java

将RijndaelManaged转换为Java,java,.net,vb.net,Java,.net,Vb.net,我想将附带的代码从vb.net转换为java 我已经做了一些尝试,但到目前为止还没有完全转换代码 也许有人能帮我 致意 CB 这就是我尝试过的: import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.security.InvalidAlgorithmParameterException;

我想将附带的代码从vb.net转换为java

我已经做了一些尝试,但到目前为止还没有完全转换代码

也许有人能帮我

致意 CB

这就是我尝试过的:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class clRijndalManaged {

    public clRijndalManaged() {
        // TODO Auto-generated constructor stub
    }
    
    private final String characterEncoding = "UTF-8";
    private final String cipherTransformation = 
//          "AES/CBC/PKCS5Padding";
            "AES/CFB/NoPadding";
//          "AES/CBC/NoPadding";
    
//          "Rijndael/CBC/PKCS7Padding";
    private final String aesEncryptionAlgorithm = "AES";
 
    public  byte[] decrypt(byte[] cipherText, byte[] key, byte [] initialVector) 
            throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, 
            InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException
    {
        Cipher cipher = Cipher.getInstance(cipherTransformation);
        SecretKeySpec secretKeySpecy = new SecretKeySpec(key, aesEncryptionAlgorithm);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec);
        cipherText = cipher.doFinal(cipherText);
        return cipherText;
    }
 
    public byte[] encrypt(byte[] plainText, byte[] key, byte [] initialVector) 
            throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, 
            InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException
    {
        Cipher cipher = Cipher.getInstance(cipherTransformation);
        SecretKeySpec secretKeySpec = new SecretKeySpec(key, aesEncryptionAlgorithm);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        plainText = cipher.doFinal(plainText);
        return plainText;
    }
 
    private byte[] getKeyBytes(String key) throws UnsupportedEncodingException{
        byte[] keyBytes= new byte[16];
        byte[] parameterKeyBytes= key.getBytes(characterEncoding);
        System.arraycopy(parameterKeyBytes, 0, keyBytes, 0, Math.min(parameterKeyBytes.length, keyBytes.length));
        return keyBytes;
    }
 
    /// <summary>
    /// Encrypts plaintext using AES 128bit key and a Chain Block Cipher and returns a base64 encoded string
    /// </summary>
    /// <param name="plainText">Plain text to encrypt</param>
    /// <param name="key">Secret key</param>
    /// <returns>Base64 encoded string</returns>
    public String encrypt(String plainText, String key) 
            throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, 
            NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, 
            BadPaddingException{
        byte[] plainTextbytes = plainText.getBytes(characterEncoding);
        byte[] keyBytes = getKeyBytes(key);
        return Base64.getEncoder().encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes));
    }
 
    /// <summary>
    /// Decrypts a base64 encoded string using the given key (AES 128bit key and a Chain Block Cipher)
    /// </summary>
    /// <param name="encryptedText">Base64 Encoded String</param>
    /// <param name="key">Secret Key</param>
    /// <returns>Decrypted String</returns>
    public String decrypt(String encryptedText, String key) 
            throws KeyException, GeneralSecurityException, GeneralSecurityException, 
            InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, 
            IOException{
        byte[] cipheredBytes = Base64.getDecoder().decode(encryptedText);
        byte[] keyBytes = getKeyBytes(key);
        return new String(decrypt(cipheredBytes, keyBytes, keyBytes), characterEncoding);
    }
}
这是vb.net中的工作代码

       Function fncVerschluesseln(ByVal strKlartext As String, ByVal strKey As System.Security.SecureString, ByVal strSalt As String) As String
       If Trim(strKlartext) = "" Then
           Return "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
           Exit Function
       End If
       Dim rd As New RijndaelManaged
       Dim md5 As New MD5CryptoServiceProvider
       Dim objIntPtr As IntPtr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(strKey)
       Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(fncHash(strSalt & System.Runtime.InteropServices.Marshal.PtrToStringBSTR(objIntPtr), "MD5")))
       System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(objIntPtr)
       md5.Clear()
       rd.Key = key
       rd.GenerateIV()
       Dim iv() As Byte = rd.IV
       Dim ms As New MemoryStream
       ms.Write(iv, 0, iv.Length)
       Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
       Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(strKlartext)
       cs.Write(data, 0, data.Length)
       cs.FlushFinalBlock()
       Dim encdata() As Byte = ms.ToArray()
       fncVerschluesseln = Convert.ToBase64String(encdata)
       cs.Close()
       rd.Clear()
   End Function

   Function fncEntschluesseln(ByVal strCrypt As String, ByVal strKey As System.Security.SecureString, ByVal strSalt As String) As String
       If strCrypt = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" Then
           Return ""
           Exit Function
       End If
       Dim rd As New RijndaelManaged
       Dim rijndaelIvLength As Integer = 16
       Dim md5 As New MD5CryptoServiceProvider
       Dim objIntPtr As IntPtr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(strKey)
       Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(fncHash(strSalt & System.Runtime.InteropServices.Marshal.PtrToStringBSTR(objIntPtr), "MD5")))
       System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(objIntPtr)
       md5.Clear()
       Dim encdata() As Byte = Convert.FromBase64String(strCrypt)
       Dim ms As New MemoryStream(encdata)
       Dim iv(15) As Byte
       ms.Read(iv, 0, rijndaelIvLength)
       rd.IV = iv
       rd.Key = key
       Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
       If ms.Length - rijndaelIvLength = -16 Then
           fncEntschluesseln = ""
           Exit Function
       End If
       Dim data(ms.Length - rijndaelIvLength) As Byte
       Dim i As Integer = cs.Read(data, 0, data.Length)
       fncEntschluesseln = System.Text.Encoding.UTF8.GetString(data, 0, i)
       cs.Close()
       rd.Clear()
   End Function

好的,那么实际的问题是什么?你想让我们对VB代码进行反向工程以了解它应该做什么吗?你想让我们运行你的java代码来找出它(不)在做什么吗?任何有帮助的东西:-)。第一个目标是让解密在java中工作。也许有人有过将RijndaelManaged转换为java的经验?我想我已经发现的一件事是,这个java实现的密钥长度是有限的,md5字符串的长度应该是到use@C.B.这就是为什么不使用“md5字符串”(我相信您考虑的是十六进制字符串),而是字节。从用Java实现加密和解密开始,当你能正确地做到这一点时,你不会被细节绊倒。问题是我希望与vb.net应用程序兼容,并解密现有的值
       Function fncVerschluesseln(ByVal strKlartext As String, ByVal strKey As System.Security.SecureString, ByVal strSalt As String) As String
       If Trim(strKlartext) = "" Then
           Return "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
           Exit Function
       End If
       Dim rd As New RijndaelManaged
       Dim md5 As New MD5CryptoServiceProvider
       Dim objIntPtr As IntPtr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(strKey)
       Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(fncHash(strSalt & System.Runtime.InteropServices.Marshal.PtrToStringBSTR(objIntPtr), "MD5")))
       System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(objIntPtr)
       md5.Clear()
       rd.Key = key
       rd.GenerateIV()
       Dim iv() As Byte = rd.IV
       Dim ms As New MemoryStream
       ms.Write(iv, 0, iv.Length)
       Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
       Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(strKlartext)
       cs.Write(data, 0, data.Length)
       cs.FlushFinalBlock()
       Dim encdata() As Byte = ms.ToArray()
       fncVerschluesseln = Convert.ToBase64String(encdata)
       cs.Close()
       rd.Clear()
   End Function

   Function fncEntschluesseln(ByVal strCrypt As String, ByVal strKey As System.Security.SecureString, ByVal strSalt As String) As String
       If strCrypt = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" Then
           Return ""
           Exit Function
       End If
       Dim rd As New RijndaelManaged
       Dim rijndaelIvLength As Integer = 16
       Dim md5 As New MD5CryptoServiceProvider
       Dim objIntPtr As IntPtr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(strKey)
       Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(fncHash(strSalt & System.Runtime.InteropServices.Marshal.PtrToStringBSTR(objIntPtr), "MD5")))
       System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(objIntPtr)
       md5.Clear()
       Dim encdata() As Byte = Convert.FromBase64String(strCrypt)
       Dim ms As New MemoryStream(encdata)
       Dim iv(15) As Byte
       ms.Read(iv, 0, rijndaelIvLength)
       rd.IV = iv
       rd.Key = key
       Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
       If ms.Length - rijndaelIvLength = -16 Then
           fncEntschluesseln = ""
           Exit Function
       End If
       Dim data(ms.Length - rijndaelIvLength) As Byte
       Dim i As Integer = cs.Read(data, 0, data.Length)
       fncEntschluesseln = System.Text.Encoding.UTF8.GetString(data, 0, i)
       cs.Close()
       rd.Clear()
   End Function