本文目錄一覽:
- 1、求教nodejs怎麼對密碼進行加鹽的hash加密
- 2、java怎麼實現對密碼用SHA-256加密
- 3、java shiro加鹽之後怎麼反解密
- 4、在java中怎麼通過md5和salt來修改密碼
- 5、java 給密碼字段加密
- 6、如何使用java對密碼加密 加密方式aes
求教nodejs怎麼對密碼進行加鹽的hash加密
以前java項目最近打算用node.js重寫,但是加密這裡實在沒搞定。java中加密是:1024次加鹽sha-1加密,
一個例子:salt:47998d63768aa877,密文:bef36ba826b045a7c5e536a2f7131a6c232eee36,明文: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裡面是這麼乾的,但是結果一直不對,代碼如下:
//bef36ba826b045a7c5e536a2f7131a6c232eee36
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);
}
java怎麼實現對密碼用SHA-256加密
import java.security.MessageDigest;
public class Test{
public static void main(String[] args) {
String t= “abcd”;
try {
MessageDigest md = MessageDigest.getInstance(“SHA-256”);
md.update(t.getBytes(“GBK”));
for(byte b:md.digest())
System.out.format(“%02X”,b);
} catch (Exception e) {
e.printStackTrace();
}
}
}
=========
88D4266FD4E6338D13B845FCFD209CB9217DA3EF
PHP驗證
?php
echo hash(‘sha256’, ‘abcd’);
88d4266fd4e6338d13b845fcfd209cb9217da3ef
驗證無誤
java shiro加鹽之後怎麼反解密
hash函數是一種單向散列算法,這意味着從明文可以得到散列值,而散列值不可以還原為明文。
驗證密碼的方法是將用戶輸入的密碼與鹽值按照加密時使用的hash算法再hash一次,並與數據庫中存儲的hash值作比較,若兩者一致則認為密碼正確。
在java中怎麼通過md5和salt來修改密碼
MD5很簡單,有專門的類,自己定義一個加密用的saltKey。
還有自己寫簡單的加密解密可以用異或算法,一個字符串於某字符異或就加密了,再與這個字符異或又解密了。很簡單的算法。不過比較容易破解
java 給密碼字段加密
要是你想做得正規些,MD5或SHA1就是最好的選擇了。它們至今都還十分安全。沒發現有比這兩者更好的解決方案。
MD5就是MD5,是一種算法,公開的,唯一的,沒有安全的版本和普通的版本之分。大家用的MD5都是一樣的。請始終記住,公開的才是安全的。密碼學中都有講的。
為了安全,你可以在MD5加密時,加些鹽。舉個例,將用戶名,密碼,和自定義的一些字符串連起來,然後再進行MD5計算。如:MyUsernameMyPasswordSalt。這麼長的串是不容易破解的。你甚至可以連續使用兩次MD5。
如果你光是對密碼MD5加密,則網上有專門的破解工具,對於位數比較小的密碼,極易破解,甚至秒殺。。
如何使用java對密碼加密 加密方式aes
Java有相關的實現類:具體原理如下
對於任意長度的明文,AES首先對其進行分組,每組的長度為128位。分組之後將分別對每個128位的明文分組進行加密。
對於每個128位長度的明文分組的加密過程如下:
(1)將128位AES明文分組放入狀態矩陣中。
(2)AddRoundKey變換:對狀態矩陣進行AddRoundKey變換,與膨脹後的密鑰進行異或操作(密鑰膨脹將在實驗原理七中詳細討論)。
(3)10輪循環:AES對狀態矩陣進行了10輪類似的子加密過程。前9輪子加密過程中,每一輪子加密過程包括4種不同的變換,而最後一輪只有3種變換,前9輪的子加密步驟如下:
● SubBytes變換:SubBytes變換是一個對狀態矩陣非線性的變換;
● ShiftRows變換:ShiftRows變換對狀態矩陣的行進行循環移位;
● MixColumns變換:MixColumns變換對狀態矩陣的列進行變換;
● AddRoundKey變換:AddRoundKey變換對狀態矩陣和膨脹後的密鑰進行異或操作。
最後一輪的子加密步驟如下:
● SubBytes變換:SubBytes變換是一個對狀態矩陣非線性的變換;
● ShiftRows變換:ShiftRows變換對狀態矩陣的行進行循環移位;
● AddRoundKey變換:AddRoundKey變換對狀態矩陣和膨脹後的密鑰進行異或操作;
(4)經過10輪循環的狀態矩陣中的內容就是加密後的密文。
AES的加密算法的偽代碼如下。
在AES算法中,AddRoundKey變換需要使用膨脹後的密鑰,原始的128位密鑰經過膨脹會產生44個字(每個字為32位)的膨脹後的密鑰,這44個字的膨脹後的密鑰供11次AddRoundKey變換使用,一次AddRoundKey使用4個字(128位)的膨脹後的密鑰。
三.AES的分組過程
對於任意長度的明文,AES首先對其進行分組,分組的方法與DES相同,即對長度不足的明文分組後面補充0即可,只是每一組的長度為128位。
AES的密鑰長度有128比特,192比特和256比特三種標準,其他長度的密鑰並沒有列入到AES聯邦標準中,在下面的介紹中,我們將以128位密鑰為例。
四.狀態矩陣
狀態矩陣是一個4行、4列的字節矩陣,所謂字節矩陣就是指矩陣中的每個元素都是一個1字節長度的數據。我們將狀態矩陣記為State,State中的元素記為Sij,表示狀態矩陣中第i行第j列的元素。128比特的明文分組按字節分成16塊,第一塊記為“塊0”,第二塊記為“塊1”,依此類推,最後一塊記為“塊15”,然後將這16塊明文數據放入到狀態矩陣中,將這16塊明文數據放入到狀態矩陣中的方法如圖2-2-1所示。
塊0
塊4
塊8
塊12
塊1
塊5
塊9
塊13
塊2
塊6
塊10
塊14
塊3
塊7
塊11
塊15
圖2-2-1 將明文塊放入狀態矩陣中
五.AddRoundKey變換
狀態矩陣生成以後,首先要進行AddRoundKey變換,AddRoundKey變換將狀態矩陣與膨脹後的密鑰進行按位異或運算,如下所示。
其中,c表示列數,數組W為膨脹後的密鑰,round為加密輪數,Nb為狀態矩陣的列數。
它的過程如圖2-2-2所示。
圖2-2-2 AES算法AddRoundKey變換
六.10輪循環
經過AddRoundKey的狀態矩陣要繼續進行10輪類似的子加密過程。前9輪子加密過程中,每一輪要經過4種不同的變換,即SubBytes變換、ShiftRows變換、MixColumns變換和AddRoundKey變換,而最後一輪只有3種變換,即SubBytes變換、ShiftRows變換和AddRoundKey變換。AddRoundKey變換已經討論過,下面分別討論餘下的三種變換。
1.SubBytes變換
SubBytes是一個獨立作用於狀態字節的非線性變換,它由以下兩個步驟組成:
(1)在GF(28)域,求乘法的逆運算,即對於α∈GF(28)求β∈GF(28),使αβ =βα = 1mod(x8 + x4 + x3 + x + 1)。
(2)在GF(28)域做變換,變換使用矩陣乘法,如下所示:
由於所有的運算都在GF(28)域上進行,所以最後的結果都在GF(28)上。若g∈GF(28)是GF(28)的本原元素,則對於α∈GF(28),α≠0,則存在
β ∈ GF(28),使得:
β = gαmod(x8 + x4 + x3 + x + 1)
由於g255 = 1mod(x8 + x4 + x3 + x + 1)
所以g255-α = β-1mod(x8 + x4 + x3 + x + 1)
根據SubBytes變換算法,可以得出SubBytes的置換表,如表2-2-1所示,這個表也叫做AES的S盒。該表的使用方法如下:狀態矩陣中每個元素都要經過該表替換,每個元素為8比特,前4比特決定了行號,後4比特決定了列號,例如求SubBytes(0C)查表的0行C列得FE。
表2-2-1 AES的SubBytes置換表
它的變換過程如圖2-2-3所示。
圖2-2-3 SubBytes變換
AES加密過程需要用到一些數學基礎,其中包括GF(2)域上的多項式、GF(28)域上的多項式的計算和矩陣乘法運算等,有興趣的同學請參考相關的數學書籍。
2.ShiftRows變換
ShiftRows變換比較簡單,狀態矩陣的第1行不發生改變,第2行循環左移1字節,第3行循環左移2字節,第4行循環左移3字節。ShiftRows變換的過程如圖2-2-4所示。
圖2-2-4 AES的ShiftRows變換
3.MixColumns變換
在MixColumns變換中,狀態矩陣的列看作是域GF(28)的多項式,模(x4+1)乘以c(x)的結果:
c(x)=(03)x3+(01)x2+(01)x+(02)
這裡(03)為十六進制表示,依此類推。c(x)與x4+1互質,故存在逆:
d(x)=(0B)x3+(0D)x2+(0G)x+(0E)使c(x)•d(x) = (D1)mod(x4+1)。
設有:
它的過程如圖2-2-5所示。
圖2-2-5 AES算法MixColumns變換
七.密鑰膨脹
在AES算法中,AddRoundKey變換需要使用膨脹後的密鑰,膨脹後的密鑰記為子密鑰,原始的128位密鑰經過膨脹會產生44個字(每個字為32位)的子密鑰,這44個字的子密鑰供11次AddRoundKey變換使用,一次AddRoundKey使用4個字(128位)的膨脹後的密鑰。
密鑰膨脹算法是以字為基礎的(一個字由4個字節組成,即32比特)。128比特的原始密鑰經過膨脹後將產生44個字的子密鑰,我們將這44個密鑰保存在一個字數組中,記為W[44]。128比特的原始密鑰分成16份,存放在一個字節的數組:Key[0],Key[1]……Key[15]中。
在密鑰膨脹算法中,Rcon是一個10個字的數組,在數組中保存着算法定義的常數,分別為:
Rcon[0] = 0x01000000
Rcon[1] = 0x02000000
Rcon[2] = 0x04000000
Rcon[3] = 0x08000000
Rcon[4] = 0x10000000
Rcon[5] = 0x20000000
Rcon[6] = 0x40000000
Rcon[7] = 0x80000000
Rcon[8] = 0x1b000000
Rcon[9] = 0x36000000
另外,在密鑰膨脹中包括其他兩個操作RotWord和SubWord,下面對這兩個操作做說明:
RotWord( B0,B1,B2,B3 )對4個字節B0,B1,B2,B3進行循環移位,即
RotWord( B0,B1,B2,B3 ) = ( B1,B2,B3,B0 )
SubWord( B0,B1,B2,B3 )對4個字節B0,B1,B2,B3使用AES的S盒,即
SubWord( B0,B1,B2,B3 ) = ( B’0,B’1,B’2,B’3 )
其中,B’i = SubBytes(Bi),i = 0,1,2,3。
密鑰膨脹的算法如下:
八.解密過程
AES的加密和解密過程並不相同,首先密文按128位分組,分組方法和加密時的分組方法相同,然後進行輪變換。
AES的解密過程可以看成是加密過程的逆過程,它也由10輪循環組成,每一輪循環包括四個變換分別為InvShiftRows變換、InvSubBytes變換、InvMixColumns變換和AddRoundKey變換;
這個過程可以描述為如下代碼片段所示:
九.InvShiftRows變換
InvShiftRows變換是ShiftRows變換的逆過程,十分簡單,指定InvShiftRows的變換如下。
Sr,(c+shift(r,Nb))modNb= Sr,c for 0 r 4 and 0 ≤ c Nb
圖2-2-6演示了這個過程。
圖2-2-6 AES算法InvShiftRows變換
十.InvSubBytes變換
InvSubBytes變換是SubBytes變換的逆變換,利用AES的S盒的逆作字節置換,表2-2-2為InvSubBytes變換的置換表。
表2-2-2 InvSubBytes置換表
十一.InvMixColumns變換
InvMixColumns變換與MixColumns變換類似,每列乘以d(x)
d(x) = (OB)x3 + (0D)x2 + (0G)x + (0E)
下列等式成立:
( (03)x3 + (01)x2 + (01)x + (02) )⊙d(x) = (01)
上面的內容可以描述為以下的矩陣乘法:
十二.AddRoundKey變換
AES解密過程的AddRoundKey變換與加密過程中的AddRoundKey變換一樣,都是按位與子密鑰做異或操作。解密過程的密鑰膨脹算法也與加密的密鑰膨脹算法相同。最後狀態矩陣中的數據就是明文。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183061.html