密碼鹽加密
① 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加密都是不可逆的,所以都是講明文進行加密後對比資料庫存儲的密文