上文《服务端接口安全之验签sign案例》我们介绍了sign验签的案例,在服务端接口安全里面,有时候我们部分传递的参数还得使用对称加密的方式进行传输,在客户端把具体的参数值进行加密,然后在服务端使用密钥把参数值解密出来。这里一般常用的对称加密算法主要是AES加解密算法。
对于网上使用AES加解密的算法方式方法很多,这里我们也列举下相关的示例方法,伪代码如下:
package com.aes.encript.utils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class Demo1 {
private static String secret = "abcdefghijklmnop";
private static final String ALGORITHM = "AES"; // 指定加密算法为AES
private static final int KEY_SIZE = 256; // 设置密钥长度为256位(32字节)
public static void main(String[] args) throws Exception {
String plainText = "Hello World!"; // 要进行加密的明文
//测试加密
String rs1 = aesEncode(plainText, secret);
System.out.println("加密后的字符串是:" + rs1);
//测试解密
String rs2 = aesDecode("q5IR58vYrda6GZSvy/95Kg==", secret);
System.out.println("解密后的字符串是:" + rs2);
}
/**
* 加密模块
*
* @param text
* @param key
* @return
*/
private static String aesEncode(String plainText, String key) throws Exception {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
byte[] rs = cipher.doFinal(plainText.getBytes("UTF-8"));
return new BASE64Encoder().encode(rs);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String aesDecode(String plainText, String key) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
//采用base64算法进行转码,避免出现中文乱码
byte[] encryptBytes = new BASE64Decoder().decodeBuffer(plainText);
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}上诉示例代码需要引入的maven依赖是:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency>
最后我们测试下效果:
可以看到成功的实现了加解密的要求。
备注:
1、使用aes加解密的密钥一定要是16位的,不然会出现报错。 2、部分团队里面使用的密钥不是16位的,但是在使用的时候强行补足了16位,所以没出现问题。










还没有评论,来说两句吧...