㈠ 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部分 分组密码的模式