Java еквивалент на метода Convert.FromBase64String

Има ли някакъв Java еквивалент на Convert.FromBase64String, който

Преобразува посочения низ, който кодира двоични данни като 64-битови цифри, в еквивалентен 8-битов масив от цели числа без знак.

Опитах:

Ще съм благодарен за всякакви предложения!


person Maksym Gontar    schedule 16.02.2010    source източник
comment
Отказвам да давам връзката към apache commons-codec повече от веднъж на ден..   -  person Bozho    schedule 16.02.2010
comment
java няма неподписани типове btw   -  person Bozho    schedule 16.02.2010
comment
правилно, но трябва да имам същите стойности, каквито биха били в c# или каквото и да е (означава int 255 вместо байт -1)   -  person Maksym Gontar    schedule 17.02.2010


Отговори (2)


Като цяло шансовете са добри, ако стандартните библиотеки на Java нямат нещо, от което се нуждаете, рамката на Apache Commons има. В този случай искате decodeBase64 метод от commons.codec.binary.Base64.

person John Feminella    schedule 16.02.2010
comment
благодаря, пробвах и двата метода за декодиране и кодиране, но все пак това не са неподписани 8-битови данни, дадени в резултат... - person Maksym Gontar; 16.02.2010
comment
Не мисля, че е редно. Резултатът от decodeBase64 е byte[]. - person John Feminella; 16.02.2010
comment
прието, наистина трябваше да използвам метода ‹i›decode‹/i› вместо кодиране (объркан от описанието на msdn...) и да добавя маска &0xff, за да имам еквивалент на стойност без знак. В такъв случай стойностите в c# и java са абсолютно еднакви. - person Maksym Gontar; 17.02.2010

Ключът и началният вектор се преобразуват с помощта на Convert.FromBase64String вAES криптиране в C#.

В java можете да използвате метода DatatypeConverter.parseBase64Binary(string). За да го използвате импортирайте import javax.xml.bind.*;

Ето примерната програма

import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.*;

class AESEncryption {

    private static final String key = "type your key here.(base64)";
    private static final String initVector = "type your initial vector here.(base64)";

    static byte[] encodedKey = DatatypeConverter.parseBase64Binary(key);
    static byte[] encodedIV = DatatypeConverter.parseBase64Binary(initVector);

    public static String encrypt(final String value) {
        try {
            IvParameterSpec iv = new IvParameterSpec(encodedIV);
            SecretKeySpec skeySpec = new SecretKeySpec(encodedKey, "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

            byte[] encrypted = cipher.doFinal(value.getBytes());

            return Base64.getEncoder().encodeToString(encrypted);

        } catch (final Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static String decrypt(final String encrypted) {
        try {
            IvParameterSpec iv = new IvParameterSpec(encodedIV);
            SecretKeySpec skeySpec = new SecretKeySpec(encodedKey, "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

            byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));

            return new String(original);

        } catch (final Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }

    public static void main(final String[] args) {

        String originalString = "Here is your text to be encrypted.";
        System.out.println("Original String to encrypt - " + originalString);

        String encryptedString = encrypt(originalString);
        System.out.println("Encrypted String - " + encryptedString);

        String decryptedString = decrypt(encryptedString);
        System.out.println("After decryption - " + decryptedString);
    }
}
person Sevitha Heshan    schedule 03.04.2020