此加密算法为 PBEWITHMD5andDES, 带有salt,生成可变密文 , 性能较好的,使用简单。andorid下,java下测试可用。
package util; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; import android.annotation.SuppressLint; import android.util.Base64; /** * PBE——Password-based encryption(基于密码加密)。<br> * 其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。<br> * 是一种简便的加密方式。<br> * * @author <a href="mailto:hongtenzone@foxmail.com">hongten</a><br> * @date 2013-4-3<br> * * @see <a href="http://blog.csdn.net/hexingzhi/article/details/7424872">原文</a> */ public class CipherPBEMd5Des { /** * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES<测试的时候报错> * PBEWITHSHAANDDESEDE<测试的时候报错> PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1<测试的时候报错> * */ /** * 本地测试通过:<code>PBEWITHMD5ANDDES</code>,<code>PBEWITHSHA1ANDRC2_40</code> */ /** * 定义使用的算法为:PBEWITHMD5andDES算法 */ public static final String ALGORITHM = "PBEWITHMD5ANDDES"; /** * 定义迭代次数为1000次,次数越多,运算越大,越不容易破解之类。 */ private static final int ITERATIONCOUNT = 190;//origin use 1000 private String saltStr; /** * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节的倍数 * * @return byte[] 盐值 * */ @SuppressLint("TrulyRandom") private byte[] getSalt() throws Exception { // 实例化安全随机数 // 产出盐 SecureRandom random = new SecureRandom(); return random.generateSeed(32); } /** * 根据PBE密码生成一把密钥 * * @param password * 生成密钥时所使用的密码 * @return Key PBE算法密钥 * */ private Key getPBEKey(String password) throws Exception { // 实例化使用的算法 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); // 设置PBE密钥参数 PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); // 生成密钥 SecretKey secretKey = keyFactory.generateSecret(keySpec); return secretKey; } /** * 加密明文字符串 * * @param plaintext * 待加密的明文字符串 * @param password * 生成密钥时所使用的密码 * @param salt * 盐值 * @return 加密后的密文字符串 * @throws Exception */ public String encrypt(String plaintext, String password) throws Exception { Key key = getPBEKey(password); byte[] salt = getSalt(); saltStr = Base64.encodeToString(salt, Base64.DEFAULT); PBEParameterSpec parameterSpec = new PBEParameterSpec(salt,ITERATIONCOUNT); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); byte encipheredData[] = cipher.doFinal(plaintext.getBytes("UTF-8")); return Base64.encodeToString(encipheredData, Base64.DEFAULT); } public String getSaltStr(){ return saltStr; } /** * 解密密文字符串 * * @param ciphertext * 待解密的密文字符串 * @param password * 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) * @param salt * 盐值(如需解密,该参数需要与加密时使用的一致) * @return 解密后的明文字符串 * @throws Exception */ public String decrypt(String ciphertext, String password, String saltStr) throws Exception { Key key = getPBEKey(password); byte[] salt = Base64.decode(saltStr,Base64.DEFAULT); PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATIONCOUNT); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); byte[] passDec = cipher.doFinal(Base64.decode(ciphertext, Base64.DEFAULT)); return new String(passDec); } }
相关推荐
C#版PBEWithMD5AndDES加解密 有示例,可使用,如果需要修改 int md5iterations = 19; int segments = 1; salt
Java 使用jasypt包辅助,实现密码加解密。本方法实现了C#版,适用于一方加密另一方解密的情况,根据默认配置改版,可在当前版本基础上自定义更改指定算法、hash迭代次数、salt生成方式等
例如,在Java中使用PBEWithMD5AndDES加密的代码片段可能如下: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec...
PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...
}常用对称加密算法类支持密钥:64/128/256 bit(字节长度8/16/32)支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)支持模式:CBC/ECB/OFB/CFB密文编码:base64字符串/十六进制字符串/二...
Python 如何使用MD5或SHA1等算法对用户密码进行加密 Python源码Python 如何...Python源码Python 如何使用MD5或SHA1等算法对用户密码进行加密 Python源码Python 如何使用MD5或SHA1等算法对用户密码进行加密 Python源码
### C# MD5加密调用 #### 一、概述 在现代软件开发中,数据安全性变得尤为重要。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希算法,用于生成固定长度(通常为128位)的哈希值。由于其不可逆性,MD5经常...
js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法
Jasypt 使用的加密算法是 PBEWithMD5AndDES(对称加密),中文名“基于口令加密”,是一种基于密码的加密算法。该算法的特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数杂凑多重加密等方法保证数据的...
Java des加密解密, 前端加密解密,后端加密解密,前后端可以配合使用。通过base64进行加密算法。
在上面的配置中,我们设置了加密算法为 PBEWithMD5AndDES,这是 Jasypt 3.0.0 以后默认的加密算法。如果不设置这个算法,可能会导致密码无法正确加密。 在使用 Jasypt 进行加密时,需要注意的是,Jasypt 在 3.0.0 ...
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=ahtt algorithm=PBEWithMD5AndDES ``` 其中,input 是需要加密的字符串,password 是需要对 input 字符串加密...
在Java中实现PBE时,通常会结合杂凑函数和特定的加密算法,例如例子中的"PBEWITHMD5andDES",它将MD5杂凑函数与DES加密算法结合使用。 以下是一个简单的PBE加密和解密Java代码示例: 1. 在这个示例中,定义了一个...
基于JDK11 和 Jasypt java类库开发的加解密工具安装包 * 内置jdk11,无JDK环境也可使用 * 支持基于Jasypt的加密 * 支持基于Jasypt的解密 * 支持PBEWITHHMACSHA512ANDAES_256和PBEWithMD5AndDES方式加解密
其中,input参数指定要加密的密码,password参数指定加密时采用的秘钥,algorithm参数指定加密算法,默认为PBEWithMD5AndDES。执行命令后,我们将获得加密后的密码密文。 例如,使用上述命令对密码"password"进行...
基本加密器使用了简单的对称加密算法,如PBEWithMD5AndDES,适合于快速实现基础加密需求。而强大的加密器则提供了更强的安全性,通常使用更高级的算法,如PBEWithHmacSHA256AndAES_128,这提供了更强的哈希和对称...
Strong Encryptor使用强加密算法(如PBEWithMD5AndDES或PBEWithSHA1AndDESede),提供更高的安全性;而Basic Encryptor则使用相对简单的标准加密算法,适合快速实现加密功能。 2. **环境变量和配置文件加密**:...
在上述代码中,我们定义了一个`StandardPBEStringEncryptor`对象,并设置了加密算法`PBEWithMD5AndDES`以及一个密钥`test`。然后,我们分别进行了加密和解密操作。 完成加密后,可以将加密后的密码替换到`...
Java的`javax.crypto.PBEKeySpec`和`PBEWith*`算法(如PBEWithMD5AndDES)提供了PBE的支持。 10. **testdsa.java**:这可能是一个测试类,用于验证DSA算法的功能,通常包括生成密钥对、签名和验证签名的示例代码。 ...