`

aes 加密 解密with salt

阅读更多

aes加密with salt  ,可变输出密文, 密度更高级别,现在没有实际使用。

package util;

import java.security.SecureRandom;
import java.security.spec.KeySpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import android.annotation.SuppressLint;
import android.util.Base64;

public class CipherADesSalt {
	final static	int interationCount = 1000;
	final static 	int keyLength = 256;
	final static 	int saltLenth = keyLength;
	
	private byte mSalt[];
	private byte mIvi[];
	@SuppressLint("TrulyRandom")
	public String encrypt(String plaintext,String password) throws Exception{	
		SecureRandom random = new SecureRandom();
		byte[] salt = new byte[saltLenth];
		random.nextBytes(salt);
		KeySpec keySpec = new PBEKeySpec(password.toCharArray(),salt,interationCount,keyLength);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
		byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();
		SecretKey key = new SecretKeySpec(keyBytes, "AES");
		
		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
		byte[] iv = new byte[cipher.getBlockSize()];
		random.nextBytes(iv);
		IvParameterSpec ivParams = new IvParameterSpec(iv);
		cipher.init(Cipher.ENCRYPT_MODE,key,ivParams);
		byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8"));
		
		mSalt = salt;
		mIvi = iv;
		
		return Base64.encodeToString(ciphertext, Base64.DEFAULT);
	}
	
	public byte[] getDecrySalt(){
		return mSalt;
	}
	
	public byte[] getDecryIvi(){
		return mIvi;
	}
	
    public String decrypt(String encry,String password,byte salt[],byte ivi[]) throws Exception{    			
		KeySpec keySpec = new PBEKeySpec(password.toCharArray(),salt,interationCount,keyLength);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
		byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();
		SecretKey key = new SecretKeySpec(keyBytes, "AES");			
	
		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");		
		IvParameterSpec ivParams2 = new IvParameterSpec(ivi);
		cipher.init(Cipher.DECRYPT_MODE,key,ivParams2);
		
		
		byte decry[] = cipher.doFinal(Base64.decode(encry, Base64.DEFAULT));
		return new String(decry,"UTF-8");
    }
}

 

分享到:
评论

相关推荐

    PB字符串加密、解密函数

    在PB中,可以使用第三方库或者自定义的C/C++动态链接库(DLL)来实现AES加密。 2. 非对称加密:非对称加密使用一对公钥和私钥,公钥用于加密,私钥用于解密。RSA是最知名的非对称加密算法,适合于保护小量数据,如...

    AES 128位加解密C++源码(加盐)

    对于大量数据的加密解密,考虑使用多线程或者硬件加速,如Intel的AES-NI指令集,可以显著提高AES操作的速度。 在实际应用中,理解AES的工作原理和正确使用加密库是至关重要的,同时也要注意遵循密码学的最佳实践,...

    Java AES256加密解密示例代码

    Java AES256加密解密示例代码 Java AES256加密解密示例代码主要介绍了Java AES256加密解密示例代码,通过示例代码对大家的学习或者工作具有一定的参考学习价值。 什么是 AES 256? 高级加密标准(英语:Advanced ...

    加密解密秘钥sha256带盐值

    在Java中,可以使用`javax.crypto.Cipher`类实现AES加密。流程包括:初始化Cipher对象、设置工作模式(如ECB、CBC等)、生成秘钥并设置、最后执行加密操作。 5. **解密AES-128** 解密过程与加密类似,也需要相同的...

    ABAP加密和解密.doc

    在ABAP中,有时还需要自定义加密解密逻辑,这时可以利用ABAP的编程能力实现。例如,你可以创建一个自定义加密函数,基于已有的加密算法(如AES)进行扩展,以满足特定的安全需求。同时,别忘了在设计自定义加密算法...

    pb密码加密解密代码f_passwd_encrypt

    在实际应用中,密码加密解密不仅涉及技术层面,还需要考虑合规性和法规要求,比如GDPR(欧洲通用数据保护条例)等。因此,理解并正确使用“pb密码加密解密代码f_passwd_encrypt”这样的工具或库,对于构建安全的IT...

    javascript将url中的参数加密解密代码

    在JavaScript中,有时我们需要对URL中的参数进行加密和解密,以确保数据的安全性,防止敏感信息被轻易读取。...在实际的Web应用中,通常会使用更强大的加密库,如AES或RSA,来提供更强的安全保障。

    java_code.rar_java 加密解密_java_code.rar_加密解密_字符串 加密 解密_对 字符串 加密 解密

    本项目“java_code.rar”聚焦于Java实现的字符串加密解密技术,旨在提供一个实用的解决方案来保护敏感信息。 首先,我们需要理解加密和解密的基本概念。加密是将明文(可读信息)转化为密文(不可读信息)的过程,...

    WEB 加密解密小系统

    "WEB加密解密小系统"是一个典型的示例,它展示了如何在Java Web环境中实现数据的安全存储和访问。该系统的特点是对每个文件采用独立密码,并在用户查看详细信息时进行验证,增强了安全性。下面我们将深入探讨其中...

    VB加密解密算法

    2. 实例化加密/解密对象,如AES加密: ```vb Dim aes As New AesCryptoServiceProvider() aes.Key = Encoding.UTF8.GetBytes("YourKey12345678") aes.IV = Encoding.UTF8.GetBytes("YourIV12345678") ``` 3. 创建...

    利用Aes加密数据库密码 aes

    以上代码展示了如何使用AES加密和解密数据。`encrypt()`方法接受一个密钥和待加密的数据,返回加密后的字节数组;`decrypt()`方法则接受密钥和已加密的数据,返回解密后的原始字节数组。 总的来说,AES加密是保护...

    字符串加密解密

    在IT领域,字符串加密解密是一项至关重要的技术,主要用于保护数据的安全性和隐私。字符串加密是对明文字符串进行处理,将其转换成无法直接识别的密文,以防止未经授权的访问或泄露。而解密则是将密文恢复为原始的...

    Delphi文本加密解密程序..rar

    这个"Delphi文本加密解密程序"的压缩包很可能是包含了一个使用Delphi编写的程序,该程序具有对文本进行加解密的功能。在IT领域,文本加密和解密是信息安全的重要组成部分,它涉及到数据保护、隐私安全以及网络通信的...

    功能强大的php加密解密类.zip

    这个名为“功能强大的php加密解密类.zip”的资源提供了一个PHP类库,专门用于加密和解密数据。这个类库可以帮助开发者确保...在具体使用时,应遵循最佳实践,确保密钥安全,理解加密解密原理,以达到最佳的保护效果。

    易语言文件加密程序源码.zip

    4. 对称加密与非对称加密:对称加密使用相同的密钥进行加解密,例如AES;非对称加密则使用一对公钥和私钥,公钥加密的数据只能用私钥解密,反之亦然,例如RSA。根据实际需求,源码可能会采用其中的一种或两种加密...

    C#字符串加密解密源码,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

    首先,让我们聚焦于C#的加密解密技术。C#提供了System.Security.Cryptography命名空间,该命名空间包含了各种加密和解密算法,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。在这个项目中,...

    ruby-使用ruby实现的算法之加密解密算法.zip

    3. **AES加密** - AES是目前最广泛使用的对称加密算法,它支持128、192和256位的密钥长度。在Ruby中,可以使用`OpenSSL::Cipher`类的`new`方法创建一个AES对象,然后进行加密和解密操作。 4. **RSA加密** - RSA是...

    ASP加密和解密代码

    - **VBScript Crypto对象**:ASP中可以通过VBScript的Crypto对象实现加密,例如AES加密: ```vbscript Dim objCSP, strKey, strIV, strClearText, strCipherText Set objCSP = Server.CreateObject("System....

    Navicat密码加密解密

    1. 加密方式:Navicat使用的是AES(Advanced Encryption Standard)高级加密标准,这是一种对称加密算法,以其高效和安全性著称。具体实现可能结合了自定义的密钥生成和加盐(salt)过程,以增加破解的难度。 2. ...

    提供极其简单的字符串加密解密语法.zip

    - 对于AES加密,Python的示例可能如下: ```python from cryptography.fernet import Fernet key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted = cipher_suite.encrypt(b"敏感字符串") ...

Global site tag (gtag.js) - Google Analytics