快捷搜索:  汽车  科技

简述aes算法的加密过程:AES加密算法 热部署实战总结

简述aes算法的加密过程:AES加密算法 热部署实战总结

1 AES加密算法在项目中的运用总结1.1 背景

由于老系统框架较旧,新的模块采用springboot开发。 但是页面得挂载在老系统上。老系统页面利用iframe挂载子系统。

子系统的用户信息来源于老系统登录的用户。

老系统与子系统如何进行数据传输,如何保证数据安全,这个是个关键。

1.2 思路
  • 先定义好老盐、密码
  • 之后通过用户id取值 盐 字符串组成16位新盐
  • 之后新盐 明文 加密生成token
  • 子系统获取token,利用老盐解密,生成明文,明文与之前的明文相等则校验成功
1.3 代码分享-AESUtil加密类

publicclassAESUtil{ privatestaticfinalStringKEY_ALGORITHM="AES"; privatestaticfinalStringDEFAULT_CIPHER_ALGORITHM="AES/CBC/PKCS5Padding";//默认的加密算法 /** *加密 *最终的salt必须为16位 *@paramdata待加密数据 *@paramsalt *@return *@throwsException */ publicstaticStringencryptAES(Stringdata Stringsalt)throwsException{ byte[]key=salt.getBytes("UTF-8"); Ciphercipher=getCipher(Cipher.ENCRYPT_MODE key key); byte[]decryptData=data.getBytes(); byte[]decrypt=cipher.doFinal(decryptData); returnnewBASE64Encoder().encode(decrypt);//y引入appache } publicstaticCiphergetCipher(intmode byte[]key byte[]iv)throwsException{ Ciphercipher=Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); SecretKeySpecsecretKeySpec=newSecretKeySpec(key KEY_ALGORITHM); cipher.init(mode secretKeySpec newIvParameterSpec(iv)); returncipher; } /** *解密 *@paramdata加密数据 *@paramoriginal原始待加密数据 *@paramsalt *@return *@throwsException */ publicstaticStringdecryptAES(Stringdata Stringoriginal Stringsalt)throwsException{ byte[]key=salt.getBytes("UTF-8"); Ciphercipher=getCipher(Cipher.DECRYPT_MODE key key); //执行操作 byte[]result=cipher.doFinal(newBASE64Decoder().decodeBuffer(data)); returnnewString(result "UTF-8"); } } 1.4 代码分享-DecryptAESUtil加密类

@SuppressWarnings("restriction") publicclassDecryptAESUtil{ privatestaticCiphergetCipher(byte[]key byte[]iv)throwsException{ Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpecsecretKeySpec=newSecretKeySpec(key "AES"); cipher.init(Cipher.DECRYPT_MODE secretKeySpec newIvParameterSpec(iv)); returncipher; } /** *解密 * *@paramdata加密数据 *@paramoriginal原始待加密数据 *@paramsalt盐 *@return{String} */ publicstaticStringdecryptAES(Stringdata Stringoriginal Stringsalt){ try{ while(original.length()<6){ original ="0"; } intlen=original.length(); //组成16位盐 salt=original.substring(len-6 len-4) "^@$$@^" salt; byte[]key=salt.getBytes(StandardCharsets.UTF_8); Ciphercipher=getCipher(key key); //执行操作 byte[]result=cipher.doFinal(newBASE64Decoder().decodeBuffer(data)); String[]str=newString(result StandardCharsets.UTF_8).split("@"); //如果userId小于6,则判断尾数是不是0,是0就去掉 if(!original.equals(str[0])){ return""; } returnstr[1]; }catch(Exceptione){ thrownewRuntimeException(e.toString()); } } } 1.4 代码分享-简单测试

@Test publicvoidtest13()throwsException{ Stringsalt="sddm-sai"; Stringsalt1="sddm-sai"; Stringpassword="startdm-settlement-invoice"; Stringuserid="USR20160309141711599155721"; intlen=userid.length(); if(len<6){ inti=6-len; while(i>0){ userid ="0"; i--; } len=6; } Stringsubstring=userid.substring(len-6 len-4); //组成16位盐身份证2位 字符串6位 salt8位 salt=substring "^@$$@^" salt; //加密用户id "@" 密码,盐 Stringtoken=AESUtil.encryptAES(userid "@" password salt); System.out.println("加密后:" token); System.out.println("解密===="); Strings=DecryptAESUtil.decryptAES(token userid salt1); System.out.println("解密后:" s); 加密前userid@password:USR20160309141711599155721@startdm-settlement-invoice 加密后:VdEq0I05B3FpfDkEtVvbakrLHbZELgOUnwouUd0wl2TdIai1KxhEGtgsMhHdnIEjI2K5Sp ds2pF Xo3RbatdmQ== 解密中ing 解密后输出password:startdm-settlement-invoice 2 热部署在项目中的运用总结2.1 引入pom

<!--热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 2.2 配置文件

spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java spring.devtools.exclude=WEB-INF/** spring.freemarker.cache=false 2.3 开启自动编译

简述aes算法的加密过程:AES加密算法 热部署实战总结(1)

2.4 ctrl shift alt / 选择registry

简述aes算法的加密过程:AES加密算法 热部署实战总结(2)

2.5 设置项目启动加载方式

简述aes算法的加密过程:AES加密算法 热部署实战总结(3)

猜您喜欢: