是否有加密不适用于字符串格式

将加密应用于字符串后我遇到了问题,我想将该 encrypted_string 解密为普通字符串,但这些示例均无效。


此外,他们正在为字节数组代码工作,Byte_array 加密和解密非常好,但我需要它为字符串工作。


例如,我已经尝试过, How to encrypt and decrypt String with my passphrase in Java (Pc not mobile platform)?


public static String encrypt(String strClearText,String strKey) throws Exception{

    String strData="";


    try {

        SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");

        Cipher cipher=Cipher.getInstance("Blowfish");

        cipher.init(Cipher.ENCRYPT_MODE, skeyspec);

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

        strData=new String(encrypted);


    } catch (Exception e) {

        e.printStackTrace();

        throw new Exception(e);

    }

    return strData;

}


public static String decrypt(String strEncrypted,String strKey) throws Exception{

    String strData="";


    try {

        SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");

        Cipher cipher=Cipher.getInstance("Blowfish");

        cipher.init(Cipher.DECRYPT_MODE, skeyspec);

        byte[] decrypted=cipher.doFinal(strEncrypted.getBytes());

        strData=new String(decrypted);


    } catch (Exception e) {

        e.printStackTrace();

        throw new Exception(e);

    }

    return strData;

}

Stringbyte[]然后转换不能byte[]正常string工作?


慕哥6287543
浏览 111回答 2
2回答

白衣非少年

您可以使用 Base64 enocde 和解码。例子:package test;import java.util.Base64;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class Test2 {    public static void main(String[] args) throws Exception {        String key = "abc123!";        String encrypted = encrypt("test", key);        System.out.println(encrypted);        String decrypted = decrypt(encrypted, key);        System.out.println(decrypted);    }    public static String encrypt(String strClearText, String strKey) throws Exception {        String strData = "";        try {            SecretKeySpec skeyspec = new SecretKeySpec(strKey.getBytes(), "Blowfish");            Cipher cipher = Cipher.getInstance("Blowfish");            cipher.init(Cipher.ENCRYPT_MODE, skeyspec);            byte[] encrypted = cipher.doFinal(Base64.getDecoder().decode(strClearText));            strData = Base64.getEncoder().encodeToString(encrypted);        } catch (Exception e) {            e.printStackTrace();            throw new Exception(e);        }        return strData;    }    public static String decrypt(String strEncrypted, String strKey) throws Exception {        String strData = "";        try {            SecretKeySpec skeyspec = new SecretKeySpec(strKey.getBytes(), "Blowfish");            Cipher cipher = Cipher.getInstance("Blowfish");            cipher.init(Cipher.DECRYPT_MODE, skeyspec);            byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(strEncrypted));            strData = Base64.getEncoder().encodeToString(decrypted);        } catch (Exception e) {            e.printStackTrace();            throw new Exception(e);        }        return strData;    }}输出:fsmwp8c1n9w=测试

四季花海

这里简单的编解码(上面kitkat)写这个类,只调用方法class EncodeDecode{    public String encodeString(String text)  {    String b64;    byte[] data=new byte[0];    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)     {        data=text.getBytes(StandardCharsets.UTF_8);        b64=Base64.encodeToString(data,Base64.DEFAULT);    }    return b64;  } public String decodeString(String text)   {    String deString;        if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.KITKAT)        {            byte[] data2=Base64.decode(base64,Base64.DEFAULT);            deString=new String (data2,StandardCharsets.UTF_8);        }        return deString;   } }我希望这个答案能帮助你..
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java