上文《服务端接口安全之验签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位,所以没出现问题。
还没有评论,来说两句吧...