java aes加密解密-js aes加密 php解密
发布时间:2023-03-24 10:22 浏览次数:次 作者:佚名
有空之余整理了一份java、php和javascript的AES互相通用的加密解密工具类。AES算法加密和解密有几种加密模式java aes加密解密,以下例子使用128位密钥长度CBC模式演示。AES属于对称加密算法java 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加密插件: