㈠ excel vba多用戶名和密碼登陸(急急急!)
以下是我寫的一個從Sheet1的A2:B6這個范圍查找用戶名和密碼進行驗證的邏輯,你看看吧.
如果還有不芹灶懂,再問吧.
Public Sub aaaaaaaa()
Dim inName As String '輸入用戶名
Dim inPwd As String '輸入密碼
Dim rightPwd As String '檢索到的密碼
inName = "user01" '測試用戶名
inPwd = "pwd09" '測試密碼
On Error Resume Next
'根據用敗畝戶名檢索正確密碼
rightPwd = WorksheetFunction.VLookup(inName, Sheet1.Range("嫌枯扮A2:B6"), 2, False)
If rightPwd <> "" And rightPwd = inPwd Then
MsgBox "正確"
Else
MsgBox "錯誤"
End If
End Sub
㈡ aes的密碼說明
嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度:AES的區塊長度固定為128 比特,密鑰長度則可以是128,192或256比特;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256比特為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
大多數AES計算是在一個特別的有限域完成的。
AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為「狀態(state)」,其轎櫻初值就是一個明文區塊(矩粗則陣中一個元素大小就是明文區塊中的一個Byte)。(Rijndael加密法因支持更大的區塊,其矩陣行數可視情況增加)加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟: AddRoundKey — 矩陣中的每一個位元組都與該次輪秘鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。 SubBytes — 通過個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。 ShiftRows — 將矩陣中的每個橫列進岩帆棚行循環式移位。 MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每列的四個位元組。 最後一個加密循環中省略MixColumns步驟,而以另一個AddRoundKey取代。
--mysql改ROOT密碼,這樣就可以了,確保執行此條SQL語句時,實在mysql資料庫下(非自純旅建資料庫).
update user set password=PASSWORD("你的密碼") where user='root';
--password是mysql提供賀褲鬧的對禪罩密碼進制加密存儲的函數.
㈣ C# winForm 中listview怎麼顯示數據查詢結果有代碼最好!謝謝!!!
你好!
首先設置表頭,隨便寫個例子了
listView1.Columns.Add("名字", 200, HorizontalAlignment.Center);//表頭名,長度,格式
listView1.Columns.Add("密碼", 70);
listView1.Columns.Add("狀態", 120, HorizontalAlignment.Center);
listView1.GridLines = true; //顯示表格線
listView1.View = View.Details;//顯示表格細節
listView1.HeaderStyle = ColumnHeaderStyle.Clickable;//對表頭進行設置
listView1.FullRowSelect = true;//是否可以選擇行
..後面還很屬性自己去研究早旅,後面就是綁定數據陸悄凳了
DataTable dt=「你查詢出來的數據";//運碧數據查詢什麼的我就不啰嗦了
for (int i = 0; i < dt.Rows.Count; i++)
{
ListViewItem[] listViewItem = new ListViewItem[1];
listViewItem[0] = new ListViewItem(new string[] { dt.Rows[i]["名字欄位"].ToString(), dt.Rows[i]["密碼欄位"].ToString(), dt.Rows[i]["狀態欄位"].ToString()});
listView1.Items.AddRange(listViewItem);
}
這樣就行了,方法很多種,這是其中一種。
㈤ 密碼學筆記
別人用A的公鑰加密傳輸的信息,只有A的私鑰可以解密。保證了傳輸的信息的安全性。
A用A的私鑰加密的信息,別人用A的公鑰才可以解密。可以證明這個信息一定是A傳輸而來的。
共享秘鑰(對稱加密):速度快,但無法保證客戶端與伺服器之間傳輸時秘鑰的安全性。
和公開密鑰(非對稱加密):安全,速度慢。
一、客戶端請求SSL(安全套接層)通信,報文中包含自己支持的SSL版本、加密演算法等。
二、伺服器應答,附帶自己的公鑰證書,協商定好的SSL版本、加密組件。
三、客戶端根據自己本地的收信任的CA公鑰,解封伺服器公鑰證書,得到伺服器公鑰。客戶端生成一個隨機碼序列,用伺服器公鑰加密後,發回伺服器。
四、伺服器用私鑰解密後,再加密將字元串傳回客戶端。
五、客戶端確認伺服器身份後,生成對稱加密演算法和共享秘鑰,使用伺服器公鑰加密後,傳給伺服器。
六、此後,雙方使用對稱加密演算法加密數據,進行傳輸。
上面過程中,一二用於獲得合法的伺服器公鑰,三四用於確認伺服器是否為真正私鑰持有者(因為,伺服器公鑰誰都可以得到)。
使用與明文比特序列一樣長的,真正的隨機數序列,進行加密,絕對安全,因為窮舉破譯後能得到整個秘鑰空間,毫無意義。
以分組為單位進行處理的密碼演算法稱為 分組密碼。
採用 Feistel網路。
以 64 bit 為一個加密單位,首先分成兩部分,各32 bit 。
加密過程持續數輪,每輪中,使用子秘鑰與右側數據經過輪函數生成一個序列,然後與左側做 XOR 。
每輪結束後,左右兩側交換。
加解密結構相同,輪數任意,函數任意。
使用秘鑰1、2、3對明文進行加密、解密、加密三個過程,稱為三重DES。
解密過程是為了兼容老版DES,如果1、2、3秘鑰相同,則成為了普通DES。
1、3秘鑰相同,2不同時,稱為DES-EDE2 。
1、2、3秘鑰不同,稱為DES-EDE3 。
採用的是 Rijndael 演算法,SPN結構。
輸入分組為 128bit(16位元組),秘鑰長度可以以 32bit 為單位,在128~256bit之間選擇。
該演算法由多輪構成,10~14輪。
一輪中:
SubBytes,按位元組,將輸入分開,以每個位元組為索引,查表找值,替換。
ShiftRows(平移行),按位元組,打亂上面的輸出。
MixColumns (混合列),按4個位元組,比特運算。
與輪秘鑰進行 XOR 。
分組密碼:每次處理,特定長度的一塊數據。
流密碼:對數據流,連續處理,需要保持內部狀態,記錄進度。
明文分組加密後,直接成為,密文分組。
特點:攻擊者無需破譯,即可操縱明文。
明文分組,與前一個密文分組XOR,加密得到自己的密文分組。
第一個分組的前一個密文分組,由 初始化向量(隨機比特序列) 代替。
加密時,需要從頭開始。因為需要與密文分組做 XOR 。
解密時,對密文分組解密,直接與密文分組 XOR 即可。
同樣的明文分組,密文值可以不相等。
密文分組可以損壞,影響部分。
密文分組比特缺失,影響全部。
前一個密文分組,通過加密演算法得到一個比特序列,稱為 密鑰流 。
明文分組,與密鑰流 XOR,得到自己的密文分組。
解密時,加密演算法對密文分組進行加密,得到密鑰流,與密文 XOR 可得到明文。
重復攻擊:假設秘鑰相同。發送 4 個分組,攻擊者保存了後面3個。轉天,你又發送了 4 個分組,攻擊者將你後面三個替換,接收方解密後,只有 2 號分組有錯。
對於每個分組,初始化向量加密後,得到密鑰流。明文與密鑰流 XOR 後,得到密文。
速度快,密鑰流可以提前生成,或者,生成秘鑰過程可以和 XOR 運算並行。
對每個計數器加密得到密鑰流。密鑰流與明文分組 XOR ,得到密文分組。
計數器生成的數,由 一個隨機序列 nonce + 從1開始的遞增數字 組成。
對每個分組,計數器遞增後,加密,得到密鑰流。
能夠以任意順序處理分組,因為加密時需要的初始數字序列能夠計算出來。
為了確保安全,有地理局限,與不同的人通信需要不同密鑰,共享繁瑣。
每個員工有自己的密鑰,密鑰分配中心使用個人密鑰,包裹臨時會話密鑰,分配給各個員工使用。
密文=明文的E次方 MOD N
E 和 N 是RSA加密用的密鑰,也就是說,E 和 N 的組合就是公鑰。
明文=密文的D次方 MOD N
D 和 N 的組合就是私鑰。
尋兩個很大的質數 p 和 q,相乘得到 N
L為 p-1 和 q-1 的最小公倍數
隨機數生成器,不停地生成數字,直到滿足如下條件:
1 < E < L
E 和 L 的最大公約數為 1
根據 E ,計算 D
1 < E < L
E × D MOD L = 1
保證 E 與 L 互質,則 D 一定存在。
求對數很容易,求 離散對數 很困難
對一個大數字進行質因數分解,人類未找到高效演算法
利用了 MOD N下,求離散對數的困難度
加密後,密文長度翻倍
利用了 MOD N下,求平方根的困難度
密碼實現通過 對橢圓曲線上的特定點進行特殊乘法。
利用了該種乘法的逆運算非常困難這一特性
單向散列函數 又稱為,消息摘要函數、哈希函數、雜湊函數
輸入的消息 又稱為,原像
散列值 又稱為,消息摘要、指紋
完整性 又稱為,一致性
根據任意消息,計算出的散列值長度,固定
用時短
消息不同,散列值不同
具備單向性
MD是消息摘要的意思
可以產生 128bit 的散列值,但它們的抗碰撞性已被攻破
SHA-1散列值長度為 160bit,強碰撞性已被攻破
其餘的統稱為 SHA-2,散列值長度為各自後面的數字
歐盟版本
第三代 SHA
消息上限 2^64 bit。
消息長度需要是 512bit 的整數倍。這樣的 512比特 稱為一個輸入分組。
過程:
消息末尾添加 1
然後添加 0,直到最後一個分組的 448比特 的位置
最後 64比特 需要保存原是消息的長度
對每個分組計算 80 個 32bit 的值。
過程:
將 512bit 分成 32bit × 16組,稱為 W0~W15
從15組中按規律取4組,進行 XOR 運算,結果循環左移 1 位,得到另外一組。如此反復,得到總共 80 組。
ABCDE 五個 32bit 的緩沖區,保存了 160bit 的消息內部狀態。
內部狀態與每個 512bit 的輸入分組混合,一共 80 個步驟。
最終得到 160bit 的最終內部狀態。
暴力破解:暴力尋找與 1億元合同 散列值相同的文件
生日攻擊:准備兩份 散列值相同的 1億元合同
可以辨別 篡改,無法辨別 偽裝,因此還需要 認證技術
認證技術包括 消息驗證碼 和 數字簽名
消息驗證碼:可以向通信對象保證消息不被篡改
數字簽名:可以向任何人保證通信對象不被篡改
message authentication code,簡稱 MAC。
相當於 使用共享密鑰的單向散列函數
SWIFT:負責銀行間的交易,公鑰密碼使用前,都是人工配送密鑰的。
IPsec:對IP協議增加安全性,採用的是消息認證碼
SSL/TLS:網上購物等場景中所用協議。
過程:
密鑰填充 至單向散列函數要求的輸入分組大小
填充後的密鑰 與 ipad(16進制的36不斷循環)XOR,得到ipadkey
與 消息 組合,計算散列值
填充後的密鑰 與 opad(16進制的5C不斷循環)XOR,得到opadkey
與 上面得到的散列值 組合,計算新的散列值,為最終的MAC值
對第三方證明
防止否認
因為知曉密鑰的只有兩個當事人,第三者無法確定能拿到合法的密鑰,無法自己計算合法MAC值
RSA:利用質因數分解難度的那個
ElGamal:利用求離散對數的困難度的那個,數字簽名有漏洞,現僅用於公鑰密碼
DSA:Schnorr演算法與ElGamal方式的變體,只能用於數字簽名
Rabin:利用了求MOD N中平方根的困難度,可用於數字簽名和公鑰密碼
例如,verisign公司的認證業務分為三個等級,等級越高,越嚴格
ITU 國際電信聯盟和 ISO 國際標准化組織制定的 X.509 規范如下
大體包含以下內容:
簽名前的證書——簽名對象的各種消息
數字簽名演算法——簽名時所用的演算法
數字簽名——得到的數字簽名
PKI :為了能有效使用公鑰而制定的一系列規范和規格
PKI 的組成要素如下
兩種方法:一種是由認證機構生成,一種是由 PKI 用戶自行生成
認證機構有一個 CRL(認證作廢清單),具有數字簽名,記載了已經作廢的證書的編號。
認證時,從上(根證書)往下
對於密鑰,關鍵的是 密鑰空間的大小
DES 的密鑰 實質長度(即,除去校驗錯誤的比特後的長度)7位元組
DES-EDE2 的實質長度 14位元組,DES-EDE3 的實質長度 21位元組
AES 的密鑰長度可以從 128、192 和 256bit 當中選
會話密鑰:每次通信中,僅使用一次的密鑰
主密鑰:一直被重復使用的密鑰
CEK:Contents Encrypting Key
KEK: Key Encrypting Key
各個步驟中的密鑰管理方法
兩種方法:
用隨機數生成密鑰:使用具備不可預測性的偽隨機數生成器生成隨機數
用口令生成密鑰:一般使用,口令 + 一串稱為 salt 的隨機數,得到他們的散列值作為密鑰(這種方法稱為:基於口令的密碼)
事先共享
秘鑰分配中心
使用公鑰密鑰
Diffie-Hellman 密鑰交換
密鑰更新:一種提高通信機密性的技術
原理:
使用 共享密鑰 進行通信時,定期改變密鑰。
雙方使用同樣的方法,對當前密鑰求 散列值,並作為下一個密鑰
優點:
後向安全:防止破譯過去的內容
對密鑰進行加密,然後保存
意義:
同時對多個密鑰進行加密,可以減少保存密鑰的數量
步驟:
P 為非常大的質數,G 為 P 的 生成元
目的為,將 隨機數 A 的信息 含蓄地發給了 B
目的為,將 隨機數 B 的信息 含蓄地發給了 A
計算方法:密鑰 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P
計算方法:密鑰 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P
對於一個質數 P ,只有它的生成元在進行 G ^ x MOD P 時,結果能夠覆蓋 0 ~ P-1 的所有數字
用途:用於安全的保存密鑰
由來:
一 生成會話密鑰 CEK ,加密消息
二 需要保密 會話密鑰CEK,使用 密鑰加密密鑰KEK 對會話密鑰進行保密
三 現在需要保密 KEK 這個密鑰,選擇使用口令生成這個 KEK
保密的問題最終都歸結為了 安全保存密鑰,然而我們記不住密鑰。
於是,選擇單向散列函數對口令生成散列值,作為密鑰。
這個密鑰無需保存,我們可以通過口令隨時求得,口令也無法被反向推出,且口令方便記憶。
順帶,為了防止字典攻擊,生成口令散列值時,需要使用 口令 + salt(隨機數序列)
事先 已准備好 候選列表 的攻擊方法
隨機性
不可預測性
不可重見性
這三個性質,越往下越嚴格。分別稱為:
弱偽隨機數(不可用於密碼學)
強偽隨機數
真隨機數
偽隨機數生成器是公開的,種子是保密的。
確保種子的不可預測性,更加容易些。
種子是用來對偽隨機數生成器的 內部狀態進行初始化 的
R1 = (A × R0 + C) MOD M
數據有限,不能用於密碼學
單向散列函數的單向性是支撐偽隨機數序列不可預測性的基礎
利用 AES 等對稱密鑰對內部狀態進行加密
從當前時間開始,利用加密演算法 求得加密後的時間的掩碼 (因為密鑰未知,別人無法推測出掩碼信息)
與內部狀態 XOR,加密後輸出, 得到偽隨機數序列
對偽隨機數序列加密後,作為 下一個內部狀態
針對極端情況的密碼軟體,具有全部功能。
TLS 由 TLS 記錄協議 和 TLS 握手協議 疊加而成。
負責消息的 加密、壓縮 和 認證
商定 客戶端和伺服器 所用的加密演算法和密鑰
負責 傳遞 變更密碼的信號
發生錯誤時 通知對方
傳輸數據
㈥ 求AES加密中MixColumn函數的C語言寫法
1 AES加密、解密演算法原理和AVR實現
AES是分組密鑰,演算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在演算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和段則解密密鑰。
1.1圈變化
AES每一個圈變換由以下三個層組成:
非線性層——進行Subbyte變換;
線行混合層——進行ShiftRow和MixColumn運算;
密鑰加層——進行AddRoundKey運算。
① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行映射。
Schange:
ldi zh,$01;將指針指向S盒的首地址
mov zl,r2;將要查找的數據作為指針低地址
ldtemp,z+;取出這個對應的數據
mov r2,temp;交換數據完成查表
.
.
.
ret
② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。
shiftrow:;這是一個位元組換位的子程序
mov temp,r3;因為是4×4
mov r3,r7; r2 r6 r10 r14 r2 r6 r10 r14
mov r7,r11; r3 r7 r11 r15---r7 r11 r15 r3
mov r11,r15; r4 r8 r12 r17 r12 r17 r4 r8
mov r15,temp; r5 r9 r13 r18 r18 r5 r9 r13
mov temp,r4
mov temp1,r8
mov r4,r12
mov r8,r17
mov r12,temp
mov r17,temp1
mov temp,r18
mov r18,r13
mov r13,r9
mov r9,r5
mov r5,temp
ret
③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。b(x)=c(x)*a(x)的系數這樣計算:*運算不是普通的乘法運算,而是特殊的運算,即
b(x)=c(x)·a(x)(mod x4+1)
對於這個運算
b0=02。a0+03。a1+a2+a3
令xtime(a0)=02。a0
其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。
mov temp,a0;這是一個mixcolimn子程序
rcall xtime;調用xtime程序
mov a0,temp
mov temp,a1
rcall xtime
eor a0,a1
eor a0,temp
eor a0,a2
eor a0,a3;完成b(x)的計算
.
.
.
xtime:;這是一個子程序
ldi temp1,$1b
lsl temp
brcs next1;如果最高位是1,則轉移
next: ret;否則什麼也不變化
next1:eor temp,temp1
rjmp next
對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運算(addround)是將圈密鑰狀態中的對應位元組按位慎燃燃「異或」。
⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。這里不再詳細敘述。
1.2輪變化
對不同的分組長度,其對應寬虛的輪變化次數是不同的,如表1所列。
1.3密鑰擴展
AES演算法利用外部輸入密鑰K(密鑰串的字數為Nk),通過密鑰的擴展程序得到共計4(Nr+1)字的擴展密鑰。它涉及如下三個模塊:
① 位置變換(rotword)——把一個4位元組的序列[A,B,C,D]變化成[B,C,D,A];
② S盒變換(subword)——對一個4位元組進行S盒代替;
③ 變換Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。這里的x是(02),如
Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……
擴展密鑰的生成:擴展密鑰的前Nk個字就是外部密鑰K;以後的字W[[i]]等於它前一個字W[[i-1]]與前第Nk個字W[[i-Nk]]的「異或」,即W[[i]]=W[[i-1]]�W[[i- Nk]]。但是若i為Nk的倍數,則W[i]=W[i-Nk]�Subword(Rotword(W[[i-1]]))�Rcon[i/Nk]。
程序執行的時候,主要調用以上幾個子程序,具體實現如下:
Keyexpansion:
rcall rotwoed
rcall subword
rcall Rcon
.
.
.
2 AES加密、解密演算法的優化
由以上演算法的流程中可以清楚地看到,整個演算法中程序耗時最多的就是圈變化部分,因此對於演算法的優化也就在此;而圈變化部分可以優化的也就是列變化。因為列變化是一個模乘同餘規則。由於AES加密和解密是不對稱的,如果不對其進行優化,會使演算法的解密速度遠遠大於加密的速度[1]。
① 加密運算。對列變換(Mixcolumn)可以通過調用xtime子程序進行優化。
另一種有效的優化方法就是離線構造一個表格,即列變化表格。這樣只要通過查表的方式就可以提高加密速度。
② 解密演算法的優化。由於解密的列變換的系數分別是09、0E、0B和0D。在AVR單片機上實現以上的乘法顯然是需要很多的時間,從而導致了解密的性能降低。
優化方法一:對列變化進行分解使倍乘次數降低。
仔細研究解密矩陣的系數,不難發現解密矩陣和加密矩陣有著一定的聯系,即解密矩陣等於加密矩陣和一個矩陣的相乘。通過這樣的聯系,就可以對演算法進行優化:
這樣一來,只用幾個簡單的「異或」就可以實現列變化,使倍乘的次數降低,提高解密的速度。
優化方法二:構造表格。
同加密構造方法一樣,可以構造四個表格T[ea]=e×a; T[9a]=9×a;T[9a]=9×a;T[ba]=b×a。這樣一來,也只需要進行查表和簡單的異或就可以完成解密的任務。雖然這種方法將增加額外的開銷,但是它卻是一種有效的方法。
3 AES加密與解密的實驗模擬
根據以上實驗步驟和優化方法得出表2、3所列實驗結果。
設主密鑰為:(128bit)。
加密明文:。
密文:。
解密密文:。
明文:。
總之,AES密碼是一個非對稱密碼體制,它的解密要比加密復雜和費時。解密優化演算法沒有增加存儲空間的基礎上,以列變化為基礎進行處理,程序比原始的要小,而且節約了時間。解密優化方法速度最快,效率最高,但要增加系統的存儲空間,因此它的程序也是最大的一個
流程圖省略 朋友參考吧
㈦ 關於excel密碼
有時我們為了保護 Excel 文檔,會給文檔加上密碼,如文檔查看、只讀密碼,工作表、工作簿的保護密碼等,但是時間久了難免忘記密碼,這時就只好進行破解了。下面列舉幾種常用的破解Excel密碼的 方法 ,供各位參考。
excel密碼的步驟:
首先我們要明確一個前提,不同類型的密碼,破解方法是不一樣的,有些密碼可能是無法破解的;而Excel文檔又分為不同版本(xls和xlsx),破解方法也有所不同。
溫馨提示:破解密碼前請先備份原文檔。
1、文檔查看、只讀密碼破解
Excel文檔的查看、只讀密碼目前沒有什麼好的破解辦法,只能採用暴力破解,就是指定一個規則,然後一個一個去試。如果你當初設置的密碼足夠復雜,那就不要做無所謂的掙扎了,建議及早放棄為好。但如果文檔十分重要,不計代價也要破解密碼,可以嘗試一些網站的收費服務,但是不要抱太高的希望。
2、工作表、工作簿的保護密碼
根據Excel文檔版本不同,工作表、工作簿保護密碼的破解方法也不太一樣。
(1)xls文檔破解方法
對於早期的xls文檔(2003及以前),可以用VBA代碼破解。
打開Excel文檔,按Alt+F11進入「開發工具」界面,在左邊的工程欄(Project)中選定節點「ThisWorkbook」,雙擊左鍵,然後把下面的代碼復制到右邊的代碼編輯框中。然後按F5鍵執行代碼開始破解,破解期間會出現兩次提示的對話框,都選擇「確認」。密碼破解完畢之後會出現提示「該工作簿中的工作表密碼保護已被全部解除」,這說明工作表或工作簿的保護密碼已被成功清除。最後刪除「ThisWorkbook」節點中的代碼,保存工作表。至此,破解完成。
Public Sub 工作表保護密碼破解()
Const DBLSPACE As String = vbNewLine & vbNewLine
Const AUTHORS As String = DBLSPACE & vbNewLine & _
"作者:McCormick JE McGimpsey "
Const HEADER As String = "工作表保護密碼破解"
Const VERSION As String = DBLSPACE & "版本 Version 1.1.1"
Const REPBACK As String = DBLSPACE & ""
Const ZHENGLI As String = DBLSPACE & ""
Const ALLCLEAR As String = DBLSPACE & "該工作簿中的工作表密碼保護已全部解除!!" & DBLSPACE & "請記得另保存" _
& DBLSPACE & "注意:不要用在不當地方,要尊重他人的勞動成果!"
Const MSGNOPWORDS1 As String = "該文件工作表中沒有加密"
Const MSGNOPWORDS2 As String = "該文件工作表中沒有加密2"
Const MSGTAKETIME As String = "解密需花費一定時間,請耐心等候!" & DBLSPACE & "按確定開始破解!"
Const MSGPWORDFOUND1 As String = "密碼重新組合為:" & DBLSPACE & "$$" & DBLSPACE & _
"如果該文件工作表有不同密碼,將搜索下一組密碼並修改清除"
Const MSGPWORDFOUND2 As String = "密碼重新組合為:" & DBLSPACE & "$$" & DBLSPACE & _
"如果該文件工作表有不同密碼,將搜索下一組密碼並解除"
Const MSGONLYONE As String = "確保為唯一的?"
Dim w1 As Worksheet, w2 As Worksheet
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer
Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer
Dim PWord1 As String
Dim ShTag As Boolean, WinTag As Boolean
Application.ScreenUpdating = False
With ActiveWorkbook
WinTag = .ProtectStructure Or .ProtectWindows
End With
ShTag = False
For Each w1 In Worksheets
ShTag = ShTag Or w1.ProtectContents
Next w1
If Not ShTag And Not WinTag Then
MsgBox MSGNOPWORDS1, vbInformation, HEADER
Exit Sub
End If
MsgBox MSGTAKETIME, vbInformation, HEADER
If Not WinTag Then
Else
On Error Resume Next
Do 'mmy do loop
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
With ActiveWorkbook
.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If .ProtectStructure = False And _
.ProtectWindows = False Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox Application.Substitute(MSGPWORDFOUND1, _
"$$", PWord1), vbInformation, HEADER
Exit Do 'Bypass all for...nexts
End If
End With
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If
If WinTag And Not ShTag Then
MsgBox MSGONLYONE, vbInformation, HEADER
Exit Sub
End If
On Error Resume Next
For Each w1 In Worksheets
'Attempt clearance with PWord1
w1.Unprotect PWord1
Next w1
On Error GoTo 0
ShTag = False
For Each w1 In Worksheets
'Checks for all clear ShTag triggered to 1 if not.
ShTag = ShTag Or w1.ProtectContents
Next w1
If ShTag Then
For Each w1 In Worksheets
With w1
If .ProtectContents Then
On Error Resume Next
Do 'Dummy do loop
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If Not .ProtectContents Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox Application.Substitute(MSGPWORDFOUND2, _
"$$", PWord1), vbInformation, HEADER
'leverage finding Pword by trying on other sheets
For Each w2 In Worksheets
w2.Unprotect PWord1
Next w2
Exit Do 'Bypass all for...nexts
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If
End With
Next w1
End If
MsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK & ZHENGLI, vbInformation, HEADER
End Sub
(2)xlsx文檔破解方法
從2007版本以後,Excel文檔的擴展名從xls變成了xlsx,文檔結構也大變樣。Xlsx文檔本質上其實是一個壓縮包,裡麵包含了許多xml文檔,工作表、工作簿的保護密碼就保存在這些xml文檔中,我們可以用WinRAR等壓縮工具將其解壓,然後直接修改內容,就可以去掉工作表、工作簿的保護密碼了。
具體方法如下:
將文檔擴展名修改為zip或rar,然後將其解壓。
在解壓得到的文件中找到「xl」文件夾,雙擊打開,「workbook.xml」中即包含工作簿的保護密碼,用記事本打開該文檔,搜索「workbookProtection」,將帶有「workbookProtection」的那一段代碼刪除即可。代碼格式如:
workbookProtection workbookAlgorithmName="SHA-512" workbookHashValue="******" workbookSaltValue="******" workbookSpinCount="100000" lockStructure="1"
另外,「xlworksheets」文件夾下的「sheet1.xml」、「sheet2.xml」中則保存了各工作表的密碼,同樣用記事本打開,搜索「sheetProtection」,將帶有「sheetProtection」的那一段代碼刪除即可。
代碼格式如:
sheetProtection algorithmName="SHA-512" hashValue="******" saltValue="******" spinCount="100000" sheet="1" formatCells="0" formatColumns="0" formatRows="0" insertColumns="0" insertRows="0" insertHyperlinks="0" deleteColumns="0" deleteRows="0" sort="0" autoFilter="0" pivotTables="0"
最後保存文件,重新壓縮為zip格式(注意必須是zip,不能是rar或其他格式),然後把這個壓縮包的後綴重新修改回xlsx。至此,破解完成。
關於excel密碼相關 文章 :
★ Excel設置密碼的方法步驟詳解
★ 如何在excel表格加密設密碼
★ Excel文件密碼匯總
★ 如何解鎖excel密碼的教程
★ excel密碼的教程
★ excel破解表格保護密碼的方法
★ 如何進入有密碼的excel的方法
★ excel如何設置許可權密碼
★ 破解excel密碼的方法圖解步驟
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm..com/hm.js?"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();㈧ 【密碼學筆記】第3部分 對稱密碼
跟諸位大牛相比,筆者閱歷尚淺、經驗不足,筆記中若有錯誤,還需繼續修正與增刪。歡迎大家的批評與指正。
查看上一篇請點擊以下鏈接: 【密碼學筆記】第2部分 歷史上的密碼
1. XOR運算
2. 一次性密碼本
3. 對稱密碼演算法
3.1 DES
3.2 三重DES
3.3 AES
3.4 Rijndael
4. 對稱密碼的選擇
5. 對稱密碼的評價
參考書目
XOR運算,又稱為 異或 運算,運算結果是 同0異1 。
對同一個比特序列進行兩次XOR之後就會回到最初的狀態,因此XOR運算可用於對稱密碼的加密和解密。
一次性密碼本(又稱為 維納密碼 )是一種非常簡單的密碼,它的原理是「 將明文與一串隨機的比特序列進行XOR運算 」。
一次性密碼本是無法破譯的。 這是因為在對它嘗試解密的過程中,所有的排列組合都會出現,既會包含規則字元串,也會包含英文單詞,還會包含亂碼。由於明文中所有可能的排列組合都會出現,因此 我們無法判斷其中哪一個才是正確的明文 。
一次性密碼本是一種非常不實用的密碼。 原因如下:
a. 密鑰的配送 。( 最大的問題 )如果能夠有一種方法將密鑰安全地發送出去,那麼就可以用同樣的方法安全地發送明文。
b. 密鑰的保存 。 密鑰的長度必須和明文的長度相等。 如果能夠有辦法安全保存與明文一樣長的密鑰,那就有辦法安全保存明文本身。
c. 密鑰的重用 。在一次性密碼本中絕對不能重用過去用過的隨機比特序列,因為作為密鑰的比特序列一旦泄露,過去所有的機密通信內容將全部被解密。
d. 密鑰的同步 。在通信過程中,發送者和接收者的密鑰的比特序列不允許有任何錯位,否則錯位的比特後的所有信息都將無法解密。
e. 密鑰的生成 。一次性密碼本需要生成大量的隨機數,這里的隨機數並不是通過計算機程序生成的偽隨機數,而必須是無重現性的真正隨機數。
DES是一種將64比特的明文加密成64比特的密文的對稱密碼演算法,它的密鑰長度是56比特。
DES是以64比特的明文(比特序列)為一個單位來進行加密的,這個64比特的單位稱為 分組 。以分組為單位進行處理的密碼演算法稱為 分組密碼 。
DES每次只能加密64比特的數據,如果要加密的明文比較長,就需要對DES加密進行迭代,而迭代的具體方式就稱為 模式(mode) 。
DES的基本結構又稱為 Feistel網路 ,這一結構不僅被用於DES,在其他很多密碼演算法中也有應用。在Feistel網路中,加密的各個步驟稱為 輪(round) ,整個加密過程就是進行若干次輪的循環。下圖展現的是Feistel網路中一輪的計算流程。DES是一種16輪循環的Feistel網路。
一輪的具體計算步驟 如下:
a. 將輸入的數據等分為左右兩部分;
b. 將輸入的右側直接發送到輸出的右側;
c. 將輸入的右側發送到輪函數;
d. 輪函數根據右側數據和子密鑰,計算出一串看上去是隨機的比特序列;
e. 將上一步得到的比特序列與左側數據進行XOR運算,並將結果作為加密後的左側。
我們需要用不同的子密鑰對一輪的處理重復若干次,並在每兩輪處理之間將左側和右側的數據對調。
Feistel網路的解密操作只要按照相反的順序來使用子密鑰就可以完成了。
Feistel網路的性質 :
a. 輪數可以任意增加;
b. 加密時無論使用任何函數作為輪函數都可以正確解密(即使該函數不存在反函數);
c. 加密和解密可以用完全相同的結構來實現。
綜上所述,無論是任何輪數、任何輪函數,Feistel網路都可以 用相同的結構實現加密和解密 ,且加密的結果必定能夠正確解密。
三重DES是為了增加DES的強度,將DES重復3次所得到的一種密碼演算法,也稱為 TDEA ,通常縮寫為 3DES 。
明文經過三次DES處理才能變成最後的密文,由於DES密鑰的長度實質上是56比特,因此三重DES的密鑰長度就是168比特。
三重DES並不是進行三次DES加密,而是 加密→解密→加密 的過程,目的是 讓三重DES能夠兼容普通的DES ,當所有密鑰都相同時,三重DES也就等同於普通的DES。
盡管三重DES目前還被銀行等機構使用,但其處理速度不高,除了特別重視向下兼容性的情況以外,很少被用於新的用途。
AES是取代其前任標准(DES)而成為新標準的一種對稱密碼演算法。全世界的企業和密碼學家提交了多個對稱密碼演算法作為AES的候選,最終選出了一種名為 Rijndael 的對稱密碼演算法,並將其確定為AES。
AES的選拔並不僅僅考慮一種演算法是否存在弱點,演算法的速度、實現的容易性等也都在考慮范圍內。此外,這種演算法還必須能夠在各種平台上有效工作。
Rijndael是由比利時密碼學家設計的 分組密碼演算法 ,被選為新一代的標准密碼演算法——AES。
和DES一樣,Rijndael演算法也是由多個 輪 構成的,其中每一輪分為 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4個步驟。DES使用Feistel網路作為其基本結構,而Rijndael使用的是 SPN結構 。
加密過程 :
a. 首先,需要 逐個位元組 地對16位元組的輸入數據進行SubBytes處理,即以每個位元組的值(0~255)為索引,從一張擁有256個值的 替換表 (S-Box)中查找出對應值( 類似於簡單替換密碼 )。
b. 進行ShiftRows處理,即以4位元組為單位的 行(row) 按照一定的規則向左平移,且每一行平移的位元組數是不同的。
c. 進行MixColumns處理,即對一個4位元組的值進行比特運算,將其變為另外一個4位元組值。
d. 最後,將MixColumns的輸出與輪密鑰進行 XOR ,即進行AddRoundKey處理。至此,Rijndael的一輪就結束了。實際上,在Rijndael中需要重復進行10~14輪計算。
在SPN結構中, 輸入的所有比特在一輪中都會被加密 。和每一輪都只加密一半輸入的比特的Feistel網路相比,這種方式的優勢在於 加密所需要的輪數更少 。此外,這種方式還有一個優勢,即 SubBytes、ShiftRows和MixColumns可以分別以位元組、行和列為單位進行並行計算 。
在Rijndael的 加密 過程中,每一輪所進行的處理為:
SubBytes→ShiftRows→MixColumns→AddRoundKey
而在 解密 時,則是按照相反的順序來進行的,即:
AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes
解密過程 :
Rijndael演算法背後有著 嚴謹的數學結構 ,即從明文到密文的計算過程可以全部用公式來表達,這是以前任何密碼演算法都不具備的性質。如果Rijndael的公式能夠通過數學運算來求解,那也就意味著Rijndael能夠通過數學方法進行破譯,這也為新的攻擊方式的產生提供了可能。
(1) 因為現在用暴力破解法已經能夠在現實的時間內完成對DES的破譯, DES不應再用於任何新的用途 。但是也需要保持與舊版本軟體的兼容性。
(2) 盡管在一些重視兼容性的環境中會使用三重DES,但 我們也沒有理由將三重DES用於新的用途 ,它會逐漸被AES所取代。
(3) 現在應該使用的演算法是AES(Rijndael) ,因為它安全、快速,而且能夠在各種平台上工作。
(4) AES最終候選演算法應該可以作為AES的備份 ,因為這些密碼演算法也都經過了嚴格的測試,且沒有發現任何弱點。
(5) 一般來說, 我們不應該使用任何自製的密碼演算法 ,而是應該使用AES。
優點 :
使用一種密鑰空間巨大,且在演算法上沒有弱點的對稱密碼,就可以通過密文來確保明文的機密性。 巨大的密鑰空間能夠抵禦暴力破解,演算法上沒有弱點可以抵禦其他類型的攻擊。
不足 :
a. 用對稱密碼進行通信時,還會出現 密鑰的配送問題 ,即如何將密鑰安全地發送給接受者。為了解決密鑰配送問題,需要 公鑰密碼技術 。
b. 盡管使用對稱密碼可以確保機密性,但僅憑這一點還並不能完全放心。 例如發送者可能發送偽造的密文,並利用解密時返回的錯誤來盜取信息。
衷心感謝您的閱讀。
查看下一篇請點擊以下鏈接: 【密碼學筆記】第4部分 分組密碼的模式