java php js AES加密解密相互通用工具类例子
有空之余整理了一份java、php和javascript的AES互相通用的加密解密工具类。AES算法加密和解密有几种加密模式,以下例子使用128位密钥长度CBC模式演示。AES属于对称加密算法,明文的加密和解密需要使用同一个密钥。如有不足之处请指出。
java AES加密解密示例
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AES { //字符编码 private static final String CHARSET = "UTF-8"; //指定AES加密算法 private static final String ALGORITHM = "AES"; //指定AES加密算法模式 private static final String ALGORITHM_CIPHER = "AES/CBC/PKCS5Padding"; //指定密钥16位(打死也不要告诉别人)-- 记得修改16位 -- private static final String KEY = "1234567890123456"; //指定密钥偏移量16位 -- 记得修改16位 -- private static final String IV = "1234561234567890"; /** * AES加密操作 * @param plaintext 明文 * @return 密文 */ public static String encrypt(String plaintext) { try { SecretKeySpec secret = new SecretKeySpec(KEY.getBytes(CHARSET), ALGORITHM); Cipher cipher = Cipher.getInstance(ALGORITHM_CIPHER); IvParameterSpec iv = new IvParameterSpec(IV.getBytes(CHARSET)); cipher.init(Cipher.ENCRYPT_MODE, secret, iv); byte[] encrypted = cipher.doFinal(plaintext.getBytes(CHARSET)); return new BASE64Encoder().encode(encrypted); } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * AES解密操作 * @param ciphertext 密文 * @return 明文 */ public static String decrypt(String ciphertext) { try { SecretKeySpec secret = new SecretKeySpec(KEY.getBytes(CHARSET), ALGORITHM); Cipher cipher = Cipher.getInstance(ALGORITHM_CIPHER); IvParameterSpec iv = new IvParameterSpec(IV.getBytes(CHARSET)); cipher.init(Cipher.DECRYPT_MODE, secret, iv); byte[] decrypted = cipher.doFinal(new BASE64Decoder().decodeBuffer(ciphertext)); return new String(decrypted); } catch (Exception ex) { ex.printStackTrace(); } return null; } public static void main(String[] args) { //使用演示 String content = "weizhixi"; String s = AES.encrypt(content); System.out.println(s); System.out.println(decrypt(s)); //输出: //ZyAtnyBgCGxzbYTW0AzcXw== //weizhixi } }
php AES加密解密示例
class AES{ //指定AES加密算法 const CIPHER = "AES-128-CBC"; //密钥16位(打死也不要告诉别人)-- 记得修改16位 -- const AES_KEY = "1234567890123456"; //密钥偏移量16位 -- 记得修改16位 -- const AES_IV = "1234561234567890"; /** * 加密 * @param string $plaintext 明文 * @return string 密文 */ public function encrypt($plaintext){ return openssl_encrypt($plaintext, self::CIPHER, self::AES_KEY, 0, self::AES_IV); } /** * 解密 * @param string $ciphertext 密文 * @return bool|string 密文 */ public function decrypt($ciphertext){ return openssl_decrypt($ciphertext, self::CIPHER, self::AES_KEY, 0, self::AES_IV); } } //使用演示 //include 'AES.php'; $aes = new AES(); $ciphertext = $aes->encrypt('weizhixi'); var_dump($ciphertext); var_dump($aes->decrypt($ciphertext)); //输出: //ZyAtnyBgCGxzbYTW0AzcXw== //weizhixi
js AES加密解密示例
首先必须引入:crypto-js.js
//密钥16位(打死也不要告诉别人)-- 记得修改16位 -- var key = "1234567890123456"; //密钥偏移量16位 -- 记得修改16位 -- var iv = '1234561234567890'; //加密方法 function encrypt($plaintext) { var encrypted = CryptoJS.AES.encrypt($plaintext, CryptoJS.enc.Utf8.parse(key), { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); } //解密方法 function decrypt(ciphertext){ var decrypt = CryptoJS.AES.decrypt(ciphertext, CryptoJS.enc.Utf8.parse(key), { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypt.toString(CryptoJS.enc.Utf8); } //使用演示 var ciphertext = encrypt('weizhixi'); console.info(ciphertext); console.info(decrypt(ciphertext)); //输出: //ZyAtnyBgCGxzbYTW0AzcXw== //weizhixi
js中使用AES需要用到的js加密插件:
https://cdn.bootcdn.net/ajax/libs/crypto-js/4.0.0/crypto-js.js
已下载:274 次
原创文章,转载请注明出处:https://www.weizhixi.com/article/116.html