原创
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
* @author
* 加密/解密 公共类
@SuppressWarnings("restriction")
public class DESUtils
{
private static Key key;
private static String KEY_STR="mykey";
static{
// 在之前的linux服务器上这样使用没有问题,但同事往新的linux服务器上部署时出现以下异常:
// java.lang.RuntimeException:javax.crypto.BadPaddingException:Invalidpadvalue!
//原因分析:
/* SecureRandom实现完全随操作系统本身的內部状态,除非调用方在调用getInstance方法之后又调用 了setSeed方法;该实现在windows上每次生成的key都相同,但是在solaris或部分linux系统上则不同。
// try
// {
// KeyGenerator generator = KeyGenerator.getInstance("DES");
// SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");
// secureRandom.setSeed(KEY_STR.getBytes());
// generator.init(secureRandom);
// key = generator.generateKey();
// generator=null;
// }
// catch (Exception e)
// {
// throw new RuntimeException(e);
// }
// 改成这样后,就解决了!
try {
KeyGenerator generator=KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(KEY_STR.getBytes());
generator.init(128,secureRandom);
key = generator.generateKey();
generator=null;
} catch (Exception e) {
throw new RuntimeException("初始化密钥出现异常");
}
* 对字符串进行加密,返回BASE64的加密字符串
*
* @param str
* @return
* @see [类、类#方法、类#成员]
public static String getEncryptString(String str){
BASE64Encoder base64Encoder = new BASE64Encoder();
System.out.println(key);
try
{
byte[] strBytes = str.getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptStrBytes = cipher.doFinal(strBytes);
return base64Encoder.encode(encryptStrBytes);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
* 对BASE64加密字符串进行解密
*
* @param str
* @return
* @see [类、类#方法、类#成员]
public static String getDecryptString(String str){
BASE64Decoder base64Decoder = new BASE64Decoder();
try
{
byte[] strBytes = base64Decoder.decodeBuffer(str);
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptStrBytes = cipher.doFinal(strBytes);
return new String(encryptStrBytes,"UTF-8");
}
catch (Exception e)
{
throw new RuntimeException(e);
}
//main测试
// public static void main(String[] args)
// {
// String name ="admin";
// String password="123456";
// String encryname = getEncryptString(name);
// String encrypassword = getEncryptString(password);
// System.out.println("用户名加密后:"+encryname);
// System.out.println("密码加密后:"+encrypassword);
// System.out.println("用户名解密后:"+getDecryptString(encryname));
// System.out.println("密码解密后:"+getDecryptString(encrypassword));
// }
}
===================================================================================
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
* @author
* 扩展PropertyPlaceholderConfigurer将prop文件中加密后的属性解密后递交给Spring
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer
{
//encryptPropNames存储需要解密的属性
private String[] encryptPropNames = {"jdbc.username", "jdbc.password"};
*重写convertProperty,对已有加密特征的属性进行解密
@Override
protected String convertProperty(String propertyName, String propertyValue)
{
//如果在加密属性名单中发现该属性
if (isEncryptProp(propertyName))
{
String decryptValue = DESUtils.getDecryptString(propertyValue);
return decryptValue;
}else {
return propertyValue;
}
* 判断属性值是否加密
* @param propertyName
* @return
private boolean isEncryptProp(String propertyName)
{
for (String encryptName : encryptPropNames)
{
if (encryptName.equals(propertyName))
{
return true;
}
}
return false;
}
}
===================================================================================
在spring.xml文件中增加如下配置:
classpath:jdbc.properties
有0 个人打赏
在java中AES+BASE64双重加密及解密话不多说直接上代码,具体细节请看注释。importjavax.crypto.Cipher;importjavax.crypto.spec.IvParame...博文来自: ackerhu的博客
终于,RSA数据的加密和解密终于在我们的ios客户端和nodejs服务器端测试成功了,中间迈过了不少的坑。其中最重要的就是base64加密后,数据传到服务器端会变成空格。如此Base64就不能被解码了...博文来自: htmlgood的博客
1.加密进入kettle的安装目录windows系统命令行执行:Encr.bat-kettle123linux/mac系统命令行执行:encr.sh-kettle123可生成Encrypted2be9...博文来自: HipPop223的博客
使用AES加密,再使用base64编码加密。具体细节请看注释。/***加密**@paramsSrc加密的明文*@paramsKey秘钥*@paramiv向量16bytes*@return*@throw...博文来自: Carry的博客
package com.gt.agent.util;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import...博文来自: tianxiaxiaomage的博客
关于snmpsnmp中文全称为简单网关协议(Simple Network Management Protocol),很多网络设备比如交换机、路由器、防火墙上都开启了此协议,默认端口为161。其中存在风...博文来自: 收集盒 Book box
一、.拔掉电源再插上重新启动交换机,在超级终端中可以看到交换机启动画面,当出现提示按CTRL+B时,此时按住CTRL+B,我们会看到有9个选项,依次为1.downloadapplicationfile...博文来自: 朗联科技
H3C IMC MSSQL数据库的密文的解密过程**操作前提: 获得数据库密文,对IMC的程序目录有直接可读权限; 如果你有其它方式获得密文也可以。**我是先有服务器服务器权限,才有的MSSQL密文。...博文来自: 王三三
0x00 前言随着日益发展的网络技术,网络线路也变的越来越复杂。渗透测试人员在web中通过注入,上传等基本或高级脚本渗透方法到达了边界服务器。再深入时则会面对更复杂的网络,比如乱七八糟的vlan环境。...博文来自: xysoul的专栏
使用命令ipttl-expiresenable	转载于:https://blog.51cto.com/386879/1749960博文来自: weixin_33690963的博客