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: Invalid pad value!
// 原因分析:
// 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文件中增加如下配置:
<bean id="propertyConfig" class="com.gdt.smart.modules.slms.util.EncryptPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
相关推荐
文件"AESCoder"可能是一个实现AES+BASE64加密解密功能的代码库或者工具。在使用这样的工具时,开发者需要导入相关库,设置好密钥,并调用相应的函数进行加密和解密操作。在Python中,可以使用`cryptography`库来实现...
在IT行业中,加密技术是确保数据安全的重要手段。...总的来说,理解并正确使用AES ECB Base64加密解密是微信小程序开发中保障数据安全的关键。通过合理的加密策略和安全实践,可以有效防止数据泄露,保护用户隐私。
java代码实例 AES加密解密 Base64加密解密
PB BASE64加密和解密DEMO是一种在PowerBuilder(PB)环境中实现的基于BASE64编码技术的加密和解密方法。BASE64是一种常见的数据编码方式,它将二进制数据转换为可打印的ASCII字符,常用于在网络上传输包含二进制的...
工具类JAVA (Android Studio )+ JS 加密解密 AES + Base 64
开发者需要自己编写代码来实现密钥的生成、数据的分组以及3DES的加密解密过程,并结合Base64编码解码函数。 需要注意的是,虽然3DES在安全性方面比单一的DES强,但在现代密码学中,其仍被认为是较弱的加密方案,...
在iOS平台上,我们可以使用`CommonCrypto`库或者Swift的`CryptoKit`框架来实现AES加密,然后使用内置的`Data`类的`base64Encoded`方法进行Base64编码。 **应用场景** 这种组合方式常用于敏感信息的存储和传输,...
java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...
综合来看,这个项目提供了一个跨平台的加密解密解决方案,适用于VB6.0开发的桌面应用程序以及基于JavaScript的微信小程序。通过VB6.0编写的程序可能包含了实现这些加密解密算法的函数库,而VB_RSA_FRAME4.5以下.exe...
总结,通过JavaScript进行MD5、AES和Base64的加密解密是确保Web应用数据安全的重要手段。MD5用于数据校验,AES提供强加密,而Base64则方便在网络中传输二进制数据。了解并熟练运用这些加密方法,有助于开发更安全、...
压缩包内的源代码文件如aes.c、AES128Base64.c、base64.c和test.c分别代表了AES核心算法、AES128与Base64结合的实现、Base64编码和解码的实现以及测试代码。头文件aes.h、AES128Base64.h、base64.h则包含这些功能的...
本文将详细介绍如何在微信小程序中使用Base64和AES加密技术来增强数据安全性。 一、Base64编码 Base64是一种用于在网络上传输二进制数据的编码方式。它将每3个字节的数据转换为4个字符的文本字符串。在微信小程序中...
在这个压缩包中,包含的资源可以帮助我们理解并实现SHA1、SHA、MD5、AES加密与解密,以及BASE64编码和解码。下面我们将详细探讨这些加密算法和它们在Java中的实现。 1. **SHA(Secure Hash Algorithm)**: SHA是一...
使用这样的工具集,开发者可以更专注于业务逻辑,而不必关心底层加密解密的具体实现。 总的来说,微信小程序中的Base64和AES加密是保障用户数据安全的重要手段。理解并熟练运用这两种技术,对于开发安全可靠的微信...
在这个Demo中,我们主要探讨的是如何使用AES-128-CBC进行数据加密,并通过Base64编码来将加密后的结果转化为可读字符串。 AES-128-CBC的特点在于它使用128位的密钥,这提供了非常高的安全性。在CBC模式下,每个明文...
非常实用的Base64加密,解密角本。基于UTF8,支持中文加解密。
Base64转码,AES加密解密,IOS,Android,Java 后台。 本工程可以直接使用,而且与IOS,Android,JAVA 已调通。 主要用于客户端进行通信,数据之间地安全性。对数据进行加密和解密。 适用于银行等较为保密的项目中。 ...
至于“个性化加密解密功能”,这可能指的是在Base64的基础上增加额外的加密层,如使用AES、RSA等加密算法。在VB中,可以使用.NET Framework提供的`System.Security.Cryptography`命名空间下的类来实现。例如,如果...
AES(Advanced Encryption Standard)和Base64是两种常见的加密和编码方式,常被用于保护敏感信息,如用户密码、隐私数据等。 AES,全称为高级加密标准,是一种块密码,它基于替换和置换的原理,采用对称加密方式,...
本文将详细介绍如何在SQL Server中使用Base64进行加密和解密操作,特别关注如何处理包含中文、数字和字母的数据。 1. **Base64编码原理** Base64是一种基于64个可打印字符来表示二进制数据的编码方式。这64个字符...