2022-08-29 15:56

Java实现对称加密

码自答

JavaEE

(860)

(0)

收藏

对称加密--用同一个密钥,实现对信息的加密和解密.

AES--Advanced Encryption Standard  是一种区块加密的标准.

ECB--Electronic CodeBook 是一种加密模式 将需要加密的信息分成若干块,分别对每块信息进行独立加密

PKCS5Padding--一种填充模式,数据块的大小为8位,不足自动补足

加密代码:

public class Secret
{    
    //data需要加密的数据  key密钥 密钥可以是任意的字符串    
    public String encrypt(String data,String key)
    {
        try
        {
            //密钥拆分成字节数组
            byte[] keyBytes = key.getBytes();
    
            //加密字符串拆分成字节数组
            byte[] dataBytes = data.getBytes();
    
            //创建加密的对象   AES加密的算法  ECB工作模式  填充模式
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    
            //创建密钥对象
            SecretKey secretKey = new SecretKeySpec(keyBytes,"AES");
    
            //设置加密模式
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    
            //加密
            byte[] dataSecr = cipher.doFinal(dataBytes);
    
            //字节数组经过Base64编码成为字符串
            String dataSec = Base64.getEncoder().encodeToString(dataSecr);
            return dataSec;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
        return null;
    }
}


调用加密:

Secret secret = new Secret();
String data = "wanmait 做最负责人的教育";//原字符串
String key = "abcdefghijklmnop";//16位密钥
String dataSec = secret.encrypt(data,key);//加密 返回加密字符串
System.out.println(dataSec);


加密结果:

7bszSkmxi5I2dF+zlWqONDBtKJbtFQqyUY3Fb9M62hmOZM6HPxdNuyQj/NgUWA4V



解密代码:

public class Secret
{
    public String decrypt(String dataSec,String key)
    {
        //密码通过Base64解密成数组
        byte[] dataBytes = Base64.getDecoder().decode(dataSec);

        //密钥拆分成字节数组
        byte[] keyBytes = key.getBytes();

        try
        {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            //创建解密对象

            SecretKey secretKey = new SecretKeySpec(keyBytes,"AES");
            //创建密钥对象

            //设置界面模式
            cipher.init(Cipher.DECRYPT_MODE,secretKey);

            //解密
            byte[] data = cipher.doFinal(dataBytes);
            String datas = new String(data);
            return datas;
        }
        catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }

        return null;
    }
}


调用解密:

Secret secret = new Secret();
String dataSec = "7bszSkmxi5I2dF+zlWqONDBtKJbtFQqyUY3Fb9M62hmOZM6HPxdNuyQj/NgUWA4V";//加密的字符串
String key = "abcdefghijklmnop";//16位密钥
String data = secret.decrypt(dataSec,key);
System.out.println(data);


解密结果:

wanmait 做最负责人的教育

0条评论

点击登录参与评论