java.security.*篇(3)AES加密解密demo

时间:2023-02-23 03:02:47     来源:阿里云

Aes是对称加密,所谓对称加密就是加密和解密均用同样的key即可,非对称加密解密参考《java.security.*篇(1)RSA加密解密》


(资料图)

涉及类CipherSecretKeySpecIvParameterSpec

试用场景

由于是对称机密,因此适合一些加密破解不是很核心的场景,

适用场景主要如下:

非核心机密内容的通信,比如服务端-客户端聊天通信

非核心机密文件加密,查看时解密

非核心机密数据库数据内容加密,查看时解密等等

ase加密解密详细demo如下

commons-codeccommons-codec1.11

//加密key必须是16bytes长度privatestaticfinalStringAES_KEY="aes-key-aes-key?";//cbc模式向量iv必须是16bytes长度privatestaticfinalStringAES_IV="abcdefg123456789";

/***@description:demosofjdk8java.securityCipherSecretKeySpecIvParameterSpec*Aes算法加密解密*/@TestpublicvoidtestAesEncryptAndDecryptthrowsException{Stringdata="你好世界";System.out.println("需要加密的字符串:"+data);StringencryptData=encryptAes(data);System.out.println("aes加密后的字符串为:"+encryptData);StringdecryptData=decryptAES(encryptData);System.out.println("aes解密后的字符串为:"+decryptData);}

加密方法

/***@description:aes加密方法*@paramdata传入待加密数据*@return加密后的字符串**/publicStringencryptAes(Stringdata)throwsException{//创建密码器对象并获取aes/cbcinstanceCiphercipher=Cipher.getInstance("AES/CBC/NoPadding");//获取块大小intblockSize=cipher.getBlockSize;//获取要加密数据字节byte[]dataBytes=data.getBytes;//获取字节长度intplaintextLength=dataBytes.length;//判断数据字节长度是否是块大小倍数,不是的话补齐if(plaintextLength%blockSize!=0){plaintextLength=plaintextLength+(blockSize-(plaintextLength%blockSize));}//初始化字节数组并将数据拷贝过去byte[]plaintext=newbyte[plaintextLength];System.arraycopy(dataBytes,0,plaintext,0,dataBytes.length);//初始化aeseySpecSecretKeySpeckeyspec=newSecretKeySpec(AES_KEY.getBytes,"AES");//初始化iv向量,可增加加密算法的强度,cbc模式必须IvParameterSpecivspec=newIvParameterSpec(AES_IV.getBytes);//初始化cipher并赋值为encrypt对象cipher.init(Cipher.ENCRYPT_MODE,keyspec,ivspec);//执行加密byte[]encrypted=cipher.doFinal(plaintext);//base64转码加密数据returnBase64.encodeUrlSafe(encrypted).trim;}

解密方法

/***@description:aes解密方法*@paramdata传入加密后的数据*@return解密后的字符串**/publicStringdecryptAES(Stringdata)throwsException{//base解码数据byte[]encrypted1=Base64.decode(data);//初始化密码器并获取aes/cbc模式对象Ciphercipher=Cipher.getInstance("AES/CBC/NoPadding");//获取aesKeySpecSecretKeySpeckeyspec=newSecretKeySpec(AES_KEY.getBytes,"AES");//初始化iv向量,可增加加密算法的强度,cbc模式必须IvParameterSpecivspec=newIvParameterSpec(AES_IV.getBytes);//初始化cipher对象为decrpt模式cipher.init(Cipher.DECRYPT_MODE,keyspec,ivspec);//执行解码byte[]original=cipher.doFinal(encrypted1);//转为字符串并返回StringoriginalString=newString(original);returnoriginalString.trim;}

输出结果

标签: 加密解密 demo

最新文章推荐