Equivalent to CryptoStream.NET in Java?

I have an encrypted string in visual basic.NET 2008, the functions for encryption and decryption are as follows:

Imports System.Security.Cryptography Public Shared Function Encriptar(ByVal strValor As String) As String Dim strEncrKey As String = "key12345" Dim byKey() As Byte = {} Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF} Try byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey) Dim des As New DESCryptoServiceProvider Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(strValor) Dim ms As New MemoryStream Dim cs As New CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) cs.Write(inputByteArray, 0, inputByteArray.Length) cs.FlushFinalBlock() Return Convert.ToBase64String(ms.ToArray()) Catch ex As Exception Return "" End Try End Function Public Shared Function Desencriptar(ByVal strValor As String) As String Dim sDecrKey As String = "key12345" Dim byKey() As Byte = {} Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF} Dim inputByteArray(strValor.Length) As Byte Try byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey) Dim des As New DESCryptoServiceProvider If Trim(strValor).Length = 0 Then Throw New Exception("Password No debe estar en Blanco") End If inputByteArray = Convert.FromBase64String(strValor) Dim ms As New MemoryStream Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write) cs.Write(inputByteArray, 0, inputByteArray.Length) cs.FlushFinalBlock() Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8 Return encoding.GetString(ms.ToArray(), 0, ms.ToArray.Count) Catch ex As Exception Return "" End Try End Function 

for example, the word "android", encrypted with this function, gives me the result "B3xogi / Qfsc ="

now I need to decrypt the string "B3xogi / Qfsc =" from java, with the same key, which is "key12345", and the result should be "android" ... does anyone know how to do this?

Thanks in advance.

+2
source share
4 answers

Using the Apache Commons Codec for encoding / decoding hex and base64, you can use the following code:

 KeySpec ks = new DESKeySpec("key12345".getBytes("UTF-8")); SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(ks); IvParameterSpec iv = new IvParameterSpec( Hex.decodeHex("1234567890ABCDEF".toCharArray())); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, iv); byte[] decoded = cipher.doFinal(Base64.decodeBase64("B3xogi/Qfsc=")); System.out.println("Decoded: " + new String(decoded, "UTF-8")); 
+4
source

You are using DES encryption.

Here is an example of how to encrypt and decrypt using DES .

The main thing is to create SecretKey , Cipher , using it and decrypting it.

Mmmm ...

I found another article that may best satisfy your question, because it uses IVBytes :)

+2
source
 public String encryptText(String cipherText) throws Exception { String plainKey = "key12345"; String plainIV = "1234567890ABCDEF"; KeySpec ks = new DESKeySpec(plainKey.getBytes(encodingType)); SecretKey key = SecretKeyFactory.getInstance(keyDes).generateSecret(ks); IvParameterSpec iv = new IvParameterSpec( org.apache.commons.codec.binary.Hex.decodeHex(plainIV.toCharArray())); Cipher cipher = Cipher.getInstance(encryptAlgo); cipher.init(Cipher.ENCRYPT_MODE, key, iv); byte[] decoded = cipher.doFinal(cipherText.getBytes(encodingType)); return new Base64().encodeToString(decoded); } 
+1
source

The closest Java classes for the .NET CryptoStream class are CipherInputStream and CipherOutputStream .

0
source

Source: https://habr.com/ru/post/1334277/