`
czpae86
  • 浏览: 720132 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

密码加密

    博客分类:
  • JAVA
 
阅读更多

 

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Arrays;

import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;

public class PasswordEncryptionService {

	public boolean authenticate(String attemptedPassword,
			byte[] encryptedPassword, byte[] salt)
			throws NoSuchAlgorithmException, InvalidKeySpecException {
		// Encrypt the clear-text password using the same salt that was used to
		// encrypt the original password
		byte[] encryptedAttemptedPassword = getEncryptedPassword(
				attemptedPassword, salt);

		// Authentication succeeds if encrypted password that the user entered
		// is equal to the stored hash
		return Arrays.equals(encryptedPassword, encryptedAttemptedPassword);
	}

	public byte[] getEncryptedPassword(String password, byte[] salt)
			throws NoSuchAlgorithmException, InvalidKeySpecException {
		// PBKDF2 with SHA-1 as the hashing algorithm. Note that the NIST
		// specifically names SHA-1 as an acceptable hashing algorithm for
		// PBKDF2
		String algorithm = "PBKDF2WithHmacSHA1";
		// SHA-1 generates 160 bit hashes, so that's what makes sense here
		int derivedKeyLength = 160;
		// Pick an iteration count that works for you. The NIST recommends at
		// least 1,000 iterations:
		// http://csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf
		// iOS 4.x reportedly uses 10,000:
		// http://blog.crackpassword.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/
		int iterations = 20000;

		KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations,
				derivedKeyLength);

		SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);

		return f.generateSecret(spec).getEncoded();
	}

	public byte[] generateSalt() throws NoSuchAlgorithmException {
		// VERY important to use SecureRandom instead of just Random
		SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

		// Generate a 8 byte (64 bit) salt as recommended by RSA PKCS5
		byte[] salt = new byte[8];
		random.nextBytes(salt);

		return salt;
	}
}

 

public static void main(String[] args) {
		PasswordEncryptionService passwordEncryptionService = new PasswordEncryptionService();
		String password = "testTest";
		try {
			//生成salt,可保存到数据库用于验证
			byte[] salt = passwordEncryptionService.generateSalt();
			//根据salt加密的密码,可保存到数据库用于验证
			byte[] encryptedPassword = passwordEncryptionService.getEncryptedPassword(password, salt);
			//验证密码,根据上面保存的salt,encryptedPassword进行密码验证
			boolean bl = passwordEncryptionService.authenticate(password, encryptedPassword, salt);
			
			System.out.println(bl);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidKeySpecException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 

 

分享到:
评论

相关推荐

    proxool连接池用户名密码加密

    总之,"proxool连接池用户名密码加密"是一个重要的安全实践,通过加密数据库连接的凭证,我们可以提高系统的安全性,保护数据免受未经授权的访问。正确地配置和使用这个功能,可以确保在享受数据库连接池带来的性能...

    密码加密.zip

    SYD8801 密码加密 配对SYD8801 密码加密 配对SYD8801 密码加密 配对SYD8801 密码加密 配对SYD8801 密码加密 配对

    (Java密码加密)MD5方式

    在IT行业中,密码的安全性是至关重要的,尤其是在网络服务中,如用户登录...总的来说,MD5在Java中的使用提供了一种简单的密码加密方式,但随着技术的发展,开发者应考虑使用更强大的加密策略来保护用户的敏感信息。

    aix密码加密方式

    ### AIX 密码加密方式详解 #### 一、AIX密码加密机制概述 AIX(Advanced Interactive Executive)是IBM公司开发的一种Unix操作系统,广泛应用于各种服务器环境。随着网络安全需求的不断提高,AIX系统提供了多种密码...

    sqlite对db文件进行设置密码加密

    在SQLite中,为了保护数据库文件不被未经授权的访问,可以对.db文件设置密码加密。 **SQLite数据库加密** SQLite提供了一种内置的加密机制,允许我们为.db文件设置密码,确保数据在传输和存储时的安全。这种加密...

    druid实现springmvc数据库连接的用户名和密码加密

    标题"druid实现springmvc数据库连接的用户名和密码加密"指出,我们要讨论的是如何在Spring MVC项目中利用Druid连接池进行更高级别的安全性配置,即对数据库连接的敏感信息进行加密。这通常涉及以下步骤: 1. **密码...

    java中关于Springboot加密 md5加密,注册密码加密到数据库中的关键语句,md5加密语句.pdf

    在实际开发中,除了密码加密,还应考虑使用HTTPS协议传输数据,以及在服务器端进行输入验证,防止SQL注入等攻击。同时,定期更新密码策略,限制密码的复杂性和生命周期,也是保护用户信息安全的重要措施。

    仿射密码加密与解密C++源程序

    仿射密码加密与解密C++源程序 仿射密码是一种简单的加密算法,它使用线性变换来进行加密和解密。下面我们将详细介绍仿射密码的加密和解密算法,并提供相应的C++源代码。 仿射密码的加密算法是一个线性算法,密钥...

    将用户的密码加密后再存入数据库的方法

    密码加密存储方法 密码安全是信息安全的根本,直接存储密码到数据库是极不安全的,因为一旦别人入侵了你的机器或别人有机会用你的电脑,那数据库中的密码就非常容易被别人获得。因此,为了保证用户的密码安全,我们...

    Tomcat 配置文件数据库密码加密

    Tomcat 配置文件数据库密码加密,增加factory属性和修改context.xml文件中密码为密文,在lib文件中添加自定义的factory类 代码是jdk1.8版本,包含简单的加密类和http请求,如果使用简单的加密,不需要引用额外的lib...

    tomcat_连接池数据库密码加密解密方法

    ### Tomcat连接池数据库密码加密解密方法详解 在企业级应用中,数据库的安全性尤为重要。其中,数据库连接池作为应用程序与数据库之间的桥梁,扮演着关键角色。然而,当数据库的用户名和密码直接硬编码在配置文件...

    Spring Boot 中密码加密的两种方法

    本文将详细介绍两种密码加密的方法,以帮助开发者更好地理解和应用Spring Boot框架。 1. 为什么要加密密码 在2011年的CSDN用户数据泄露事件中,大量用户的明文密码被曝光,揭示了明文存储密码的严重风险。由于许多...

    凯撒密码加密解密

    在这个项目中,我们看到的是使用HTML和JavaScript实现的凯撒密码加密与解密工具。HTML负责构建用户界面,而JavaScript则处理加密和解密的逻辑。这是一个很好的实践案例,可以帮助学习者理解基本的加密概念,并熟悉...

    druid1.0.9密码加密

    在Druid 1.0.9版本中,为了增强数据库连接的安全性,引入了密码加密的功能。这个功能允许开发者将数据库的用户名和密码加密,从而在配置文件中安全地存储这些敏感信息,避免明文密码泄露带来的风险。 首先,我们...

    栅栏密码加密解密工具

    为了使用这个"栅栏密码加密解密工具",你需要熟悉加密和解密的过程,以及可能遇到的挑战,如不均匀的文本长度和未知的栅栏数。通过实践和实验,你可以更好地掌握这种方法,并在需要时应用到实际的加密和解密任务中。...

    易语言编写的QQ密码加密器

    在本案例中,我们讨论的是一个使用易语言编写的"QQ密码加密器"。这个工具的主要功能是帮助用户对他们的QQ密码进行加密,以提高密码的安全性,防止未经授权的访问。 在网络安全领域,密码加密是非常关键的一环。QQ...

    Caesar密码加密解密

    在Caesar密码的压缩包文件中,"Caesar"可能是程序源代码文件的名字,里面包含了实现Caesar密码加密解密功能的Java源代码。通过阅读和理解这个源代码,我们可以学习到如何在实际编程中应用基础的加密解密原理,以及...

    rdp文件中的密码加密解密程序

    在标题提到的"rdp文件中的密码加密解密程序"是一种工具,专门设计用来处理RDP文件中的密码加密和解密。当RDP文件中包含`username:s:xxxx`和`password 51:b:xxxxx`这样的条目时,`xxxxx`部分就是经过加密的密码。这个...

    WPF将用户名和密码加密保存在文件当中

    在Windows Presentation Foundation(WPF)应用中...以上就是WPF客户端实现将用户名和密码加密保存在.dat文件中的核心步骤和相关技术,确保了用户数据的安全性。在实际开发中,开发者可以根据具体需求进行调整和优化。

    web应用数据库密码加密

    因此,"web应用数据库密码加密"成为了一个必要的实践。 1. **Spring Boot/Spring 中的数据库密码加密** Spring Boot和Spring框架默认使用YAML或Properties文件来配置数据库连接信息,包括用户名和密码。为了保护...

Global site tag (gtag.js) - Google Analytics