密码盐加密
① md5 为什么 加盐
原因:盐被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,散列值也是不同的。
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
(1)密码盐加密扩展阅读:
MD5相对MD4所作的改进:
1、增加了第四轮。
2、每一步均有唯一的加法常数。
3、减弱第二轮中函数的对称性。
4、第一步加上了上一步的结果,这将引起更快的雪崩效应(就是对明文或者密钥改变 1bit 都会引起密文的巨大不同)。
5、改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似。
6、近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应,各轮的位移量互不相同。
② 盐值一样,密码一样加密出来的不一样怎么回事
盐值是什么,你说差了吧
③ java shiro加盐之后怎么反解密
hash函数是一种单向散列算法,这意味着从明文可以得到散列值,而散列值不可以还原为明文。
验证密码的方法是将用户输入的密码与盐值按照加密时使用的hash算法再hash一次,并与数据库中存储的hash值作比较,若两者一致则认为密码正确。
④ 数据库编程中密码盐起什么作用
上面应该是md5方式加密,一般来说有个秘钥,相当于一个用于计算的字符串,比如说aa,那么你的密码123会用md5的方式和秘钥aa进行计算,得到一个加密后的字符串。过程大概是这样。秘钥就是为了让别人也用md5的方式给你解密的时候,猜不到秘钥是多少,也不好解密。
⑤ 请教一下QQ登录中对密码的加密盐值是怎么处理的,是md5 64位加密,但不知道盐值是怎么弄的。
一般web中sha,md5 加密算法,盐值为登录名: password=DigestUtils.md5Hex(name+pwd);
⑥ ASP.NET实现对输入的密码用MD5+盐,并加密
public partial class _Default : System.Web.UI.Page
{
public bool IsMd5
{
get
{
//添加命名空间 using System.Configuration;
return ConfigurationManager.AppSettings["Md5"] == "1";
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsMd5)
{
//添加命名空间 using System.Web.Security;
string MD5 = FormsAuthentication.("被加密的字段", "MD5"); // SHA1 MD5
}
}
}
---------------------web.config----------------------------------
<appSettings>
<!--加密, 1:代表是; 0:代表不是-->
<add key="Md5" value="1"/>
</appSettings>
⑦ 求教nodejs怎么对密码进行加盐的hash加密
以前java项目最近打算用node.js重写,但是加密这里实在没搞定。java中加密是:1024次加盐sha-1加密,
一个例子:salt:47998d63768aa877,密文:,明文:yunstudio2013
下面是java代码:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}
我在js里面是这么干的,但是结果一直不对,代码如下:
//
var hash = crypto.createHmac("sha1", “47998d63768aa877”).update(“yunstudio2013”).digest(“hex”);
for (var i = 1; i < 1024; i++) {
hash = crypto.createHmac("sha1", “47998d63768aa877”).update(hash).digest(“hex”);
console.log(hash);
}
⑧ 加盐密码哈希:如何正确使用 (密码加密的经典
t move it? I don't understand. In order to find out, I decided to continue digging the soil at its root. Digging and diggi
⑨ spring提供的几种密码加密方式
第一种:不使用任何加密方式的配置
[html]view plain
<beanid="AuthenticationProvider"
class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<!--明文加密,不使用任何加密算法,在不指定该配置的情况下,Acegi默认采用的就是明文加密-->
<!--<propertyname="passwordEncoder"><beanclass="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">
<propertyname="ignorePasswordCase"value="true"></property></bean></property>-->
</bean>
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<!--false表示:生成32位的Hex版,这也是encodeHashAsBase64的,Acegi默认配置;true表示:生成24位的Base64版-->
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--对密码加密算法中使用特定的加密盐及种子-->
<propertyname="saltSource">
<beanclass="org.acegisecurity.providers..salt.SystemWideSaltSource">
<propertyname="systemWideSalt"value="acegisalt"/>
</bean>
</property>
</bean>
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--对密码加密算法中使用特定的加密盐及种子-->
<propertyname="saltSource">
<!--通过动态的加密盐进行加密,该配置通过用户名提供加密盐,通过UserDetails的getUsername()方式-->
<beanclass="org.acegisecurity.providers..salt.ReflectionSaltSource">
<propertyname="userPropertyToUse"value="getUsername"/>
</bean>
</property>
</bean>
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="SHA-256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
packageorg.hz.test;
importjava.security.NoSuchAlgorithmException;
importorg.springframework.security.authentication.encoding.Md5PasswordEncoder;
importorg.springframework.security.authentication.encoding.ShaPasswordEncoder;
publicclassMD5Test{
publicstaticvoidmd5(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
//false表示:生成32位的Hex版,这也是encodeHashAsBase64的,Acegi默认配置;true表示:生成24位的Base64版
md5.setEncodeHashAsBase64(false);
Stringpwd=md5.encodePassword("1234",null);
System.out.println("MD5:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_256(){
ShaPasswordEncodersha=newShaPasswordEncoder(256);
sha.setEncodeHashAsBase64(true);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希算法256:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_SHA_256(){
ShaPasswordEncodersha=newShaPasswordEncoder();
sha.setEncodeHashAsBase64(false);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希算法SHA-256:"+pwd+"len="+pwd.length());
}
publicstaticvoidmd5_SystemWideSaltSource(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
md5.setEncodeHashAsBase64(false);
//使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可
Stringpwd=md5.encodePassword("1234","acegisalt");
System.out.println("MD5SystemWideSaltSource:"+pwd+"len="+pwd.length());
}
publicstaticvoidmain(String[]args){
md5();//使用简单的MD5加密方式
sha_256();//使用256的哈希算法(SHA)加密
sha_SHA_256();//使用SHA-256的哈希算法(SHA)加密
md5_SystemWideSaltSource();//使用MD5再加全局加密盐加密的方式加密
}
}
第二种:MD5方式加密
[html]view plain
第三种:使用MD5加密,并添加全局加密盐
Java代码
[html]view plain
第四种:使用MD5加密,并添加动态加密盐
[html]view plain
第五种:使用哈希算法加密,加密强度为256
[html]view plain
第六种:使用哈希算法加密,加密强度为SHA-256
[html]view plain
上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:
[java]view plain
⑩ MD5加盐 加密密码,客户端发给后台的是明文吗
一般md5加密都是不可逆的,所以都是讲明文进行加密后对比数据库存储的密文