当前位置: 首页 > 后端技术 > Java

几种常用加密算法的Java实现

时间:2023-04-02 10:35:10 Java

base64importorg.apache.commons.codec.binary.Base64;importjava.nio.charset.StandardCharsets;publicclassbybase64{privatestaticStringstr="guomz";publicstaticvoidmain(String[]args){byte[]encodeBytes=Base64.encodeBase64(str.getBytes(StandardCharsets.UTF_8));System.out.println(新字符串(encodeBytes));byte[]decodeBytes=Base64.decodeBase64(encodeBytes);System.out.println(新字符串(decodeBytes));}}base64方式比较简单,由于密码本是公开的,所以安全性比较低。使用这种方式传输数据可以防止乱码,避免明文直接传输。AES加密解密nio.charset.StandardCharsets;importjava.security.Key;publicclassbyaes{privatestaticStringstr="guomz";/***aes对称加密*@paramargs*/publicstaticvoidmain(String[]args){//下面的方法中需要使用base64encode对生成的加密字符串进行转码,先省略aesByRandomKey();System.out.println("--------------------------");aesByUsingKey("1234567812345678");//aesByUsingKey("ERUYTHMHUIWOPPHTABKKWPSJ");}/***使用随机生成的密钥加密*/privatestaticvoidaesByRandomKey(){try{//生成密钥生成器keyGenerator=KeyGenerator.getInstance("AES");//初始化密钥长度keyGenerator.init(128);秘密密钥secretKey=keyGenerator.generate钥匙();//Base64加密byte[]encodedKey=secretKey.getEncoded();System.out.println("key:"+newString(encodedKey));//密钥转换,上面的密钥可以直接指定一个随机字符串,base64加密传递给下面的方法Keykey=newSecretKeySpec(encodedKey,"AES");//加密,指定方式Ciphercipher=Cipher.getInstance("AES/ECB/PKCS5Padding");密码。初始化(密码。ENCRYPT_MODE,密钥);byte[]encryptBytes=cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));System.out.println(Hex.encodeHexString(encryptBytes));//解密cipher.init(Cipher.DECRYPT_MODE,key);byte[]decryptBytes=cipher.doFinal(encryptBytes);System.out.println(newString(decryptBytes));}catch(Exceptione){e.printStackTrace();}}/***使用自定义密钥加密*@paramkeyStr*/privatestaticvoidaesByUsingKey(StringkeyStr){try{//密钥转换,上面的key可以直接指定一个随机字符串,然后base64加密传给下面的方法Keykey=newSecretKeySpec(keyStr.getBytes(StandardCharsets.UTF_8),"AES");//加密,指定方式Ciphercipher=Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,密钥);byte[]encryptBytes=cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));系统.out.println(Hex.encodeHexString(encryptBytes));//解密cipher.init(Cipher.DECRYPT_MODE,key);byte[]decryptBytes=cipher.doFinal(encryptBytes);System.out.println(newString(decryptBytes));}catch(Exceptione){e.printStackTrace();}}}AES属于对称加密,是DES加密的升级版。密钥提供给解密方