现在常规的密码破解方式有两种,分别是暴力破解和字典破解。
所谓暴力破解,就比如你的密码是5555,通过暴力破解的方式,软件会从0000开始,0001,0002,0003……直到试到5555,破解软件得到了密码正确的信息,就把这个正确的密码反映到屏幕上了。上面只是一个例子,通常的破解软件你还可以设置字符集(比如选择是否算上符号,大小写字母和数字等)。用这种方式只要密码不超过能破译的长度范围,在一定时间下是一定能破解出来的,唯一缺点就是速度太慢。
所谓字典破解,就是有一个破解字典文件,这个字典文件中包含了通常人们会设置的密码,比如mima,password,microsoft,user,pass……破译软件会把字典中的所有单词全部试一遍。这种方式的有点就是速度很快,但是不一定能破解到密码。
所有的破译密码软件都是代替人来进行密码的尝试,由于是机器操作,所以肯定要比人自己试来快。比较高级的破译软件可以分段破解,即利用很多太电脑来一起破解加快破译密码的速度。
摩斯密码的原理是用特殊的符号代表具体的字母,对照表如下:
摩斯密码在早期无线电上举足轻重,是每个无线电通讯者所须必知的。由于通讯技术之进步,各国已于1999年停止使用摩尔斯码,但由于它所占的频宽最少,又具一种技术及艺术的特性,在实际生活中有广泛的应用。
产生历史
摩尔斯码在早期无线电上举足轻重,是每个无线电通讯者所须必知的。由于通讯技术之进步,各国已于1999年停止使用摩尔斯码,但由于它所占的频宽最少,又具一种技术及艺术的特性,在实际生活中有广泛的应用。
摩尔斯电码morse code 它由两种基本信号和不同的间隔时间组成:短促的点信号“*”,读“滴”(Di);保持一定时间的长信号“—”,读“嗒”(Da)。间隔时间:滴,1t;嗒,3t;滴嗒间,1t;字符间,3t;字间,7t。
1837年的摩尔斯电码是一些表示数字的点和划。数字对应单词,需要查找一本代码表才能知道每个词对应的数。用一个电键可以敲击出点、划以及中间的停顿。
最早的摩尔斯电码是一些表示数字的点和划。数字对应单词,需要查找一本代码表才能知道每个词对应的数。用一个电键可以敲击出点、划以及中间的停顿。 虽然摩尔斯发明了电报,但他缺乏相关的专门技术。他与艾尔菲德·维尔签定了一个协议,让他帮自己制造更加实用的设备。艾尔菲德·维尔构思了一个方案,通过点、划和中间的停顿,可以让每个字元和标点符号彼此独立地发送出去。他们达成一致,同意把这种标识不同符号的方案放到摩尔斯的专利中。这就是现在我们所熟知的美式摩尔斯电码,它被用来传送了世界上第一条电报。 它由两种基本信号和不同的间隔时间组成:短促的点信号" .",读" 的 "(Di);保持一定时间的长信号 划 "—",读"答 "(Da)。间隔时间:滴,1t;答,3t;滴答间,1t;字母间,3t;字间,5t。在一个字母或数字内,各点、划之间的间隔应为2t。字母(数字)与字母(数字)之间的间隔为7t。 摩斯密码表: 字母 电码 标准拼读 A ·- Alpha B -··· Bravo C -·-· Charlie D -··· Delta E · Echo F ··-· Foxtrot G --· Golf H ···· Hotel I ·· India J ·--- Juliet K -·- Kilo L ·-·· Lima M -- Mike N -· November O --- Oscar P ·--· Papa Q --·- Quebec R ·-· Romeo S ··· Sierra T - Tango U ··- Uniform V ···- Victor W ·-- Whiskey X -··- X-ray Y -·-- Yankee Z --·· Zulu 1·————Unaone 2··——— Bissotow 3···——Terrathree 4····— Kartefour 5····· Pantafive 6 —····Soxisix 7——··· Setteseven 8———·· Oktoeight 9————· Novenine 0————— Nadazero 摩斯密码 程序信号: 句号─·─·─ 逗号─ ─··── 求救讯号 ···———··· (SOS) 质疑的或疑问的 ·─·──·─(RQ) 发讯者 ─···(DE) 接收者(R) ·─· 错误········(EEEE etc.) Wait等 ·─··· 信息结束 ·─·─· 在我国电报通信中,每个汉字都有四个数字代表,组成其电文的数字是用的"短码"拍发的。"短码"不可和字码一起混合使用!业余无线电通信中不用"短码"! 数码(短码) 1: .- 2: ..- 3: ...-- 4: ....- 5: . 6: -.... 7: --. 8: -.. 9: -. 0: -
经典密码大致上分为替代式密码和移位式密码,具体原理看下面加粗字体
凯撒密码是广为人知的替代式密码。为了用凯撒密码法加密讯息,每个密码字母集中的字母将会被其位置的后3个字母替代。因此字母A将会被字母D替代、字母B将会被字母E替代、字母C将会被字母F替代等,最后,X、Y和Z将分别的被替代成A、B和C。
例如,"WIKIPEDIA"将被加密成"ZLNLSHGLD"。凯撒把字母向后移"3"位,但其他数字也可照著作。
另一种替代式密码是使用关键字,你可以选择一个单字或是短词组并去除所有的空格和重复的字母,接着把它当作密码字母集的开头。最后记得去除掉关键字的字母把其它字母接续排序。
移位式密码,它们字母本身不变,但它们在讯息中顺序是依照一个定义明确的计划改变。许多移位式密码是基于几何而设计的。一个简单的加密(也易被破解),可以将字母向右移1位。
例如,明文"Hello my name is Alice."将变成"olleH ym eman si ecilA."。密码棒(scytale)也是一种运用移位方法工具。
一个移位式密码的具体例子columnar cipher.先选择一个关键字,把原来的讯息由左而右、由上而下依照关键字长度转写成长方形。接着把关键字的字母依照字母集顺序编号,例如A就是1、B就是2、C就是3等。例如,关键字是CAT,明文是THE SKY IS BLUE,则讯息应该转换成这样:
C A T 3 1 20 T H E S K Y I S B L U E最后把讯息以行为单位,依照编号大小调换位置。呈现的应该是A行为第一行、C行为第二行、T行为第三行。然后就可以把讯息"The sky is blue"转写成HKSUTSILEYBE。
经典密码的破译
经典密码由于规律性很强,通常很容易被破解。许多经典密码可单单经由密文而破解,所以它们容易受到唯密文攻击法攻击(ciphertext-only attack)。
有些经典密码(像是凯撒密码)的金钥个数有限,所以这类密码可以使用暴力破解尝试所有的金钥。替代式密码有比较大的金钥数,但是容易被频率分析,因为每个密码字母各代表了一个明文字母。
另一方面,现代密码的设计可以承受更强大的ciphertext-only attacks。一个优秀的现代密码必须保证广泛潜在的攻击,包括known-plaintext attack和chosen-plaintext attack以及chosen-ciphertext attack。
对于密码破解者来说,应不能够找到关键,即使他知道明文和对应的密码文、即是他可以选择明文或密码文。经典密码再也不能满足这些强大的标准,因此,有兴趣者再也不拿它来做安全应用了。
以上内容参考 百度百科-经典密码
PBKDF2(Password-Based Key Derivation Function)是一个用来导出密钥的函数,用来生成加密的密码,增加破解的难度,类似bcrypt/scrypt等,可以用来进行密码或者口令的加密存储。主要是盐值+pwd,经过多轮HMAC算法的计算,产生的密文。
PBKDF2函数的定义
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
• PRF是一个伪随机函数,例如HASH_HMAC函数,它会输出长度为hLen的结果。
• Password是用来生成密钥的原文密码。
• Salt是一个加密用的盐值。
• c是进行重复计算的次数。
• dkLen是期望得到的密钥的长度。
• DK是最后产生的密钥。
下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。
1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g。
2,Diffie-Hellman密钥交换是一个两部分的过程,Alice和Bob都需要一个私有的数字a,b。
下面是DH交换的过程图:
本图片来自wiki
下面我们进行一个实例
1.爱丽丝与鲍伯协定使用p=23以及g=5.
2.爱丽丝选择一个秘密整数a=6, 计算A = g^a mod p并发送给鲍伯。
A = 5^6 mod 23 = 8.
3.鲍伯选择一个秘密整数b=15, 计算B = g^b mod p并发送给爱丽丝。
B = 5^15 mod 23 = 19.
4.爱丽丝计算s = B a mod p
19^6 mod 23 = 2.
5.鲍伯计算s = A b mod p
8^15 mod 23 = 2.
ECDH:
ECC算法和DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。交换双方可以在不共享任何秘密的情况下协商出一个密钥。ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。ECDH即建立在此数学难题之上。密钥磋商过程:
假设密钥交换双方为Alice、Bob,其有共享曲线参数(椭圆曲线E、阶N、基点G)。
来自
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
-----END RSA PRIVATE KEY-----
while a RSA public key contains only the following data:
-----BEGIN RSA PUBLIC KEY-----
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
-----END RSA PUBLIC KEY-----
and this explains why the private key block is larger.
Note that a more standard format for non-RSA public keys is
-----BEGIN PUBLIC KEY-----
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
-----END PUBLIC KEY-----
More info here.
BTW, since you just posted a screenshot of the private key I strongly hope it was just for tests :)
密钥的长度
C:\herongjava RsaKeyGenerator 128
p: 17902136406704537069
q: 17902136406704537077
m: 320486487924256034368552058949822333168
Modulus: 320486487924256034404356331763231407313
Key size: 128
Public key: 138184930940463531660820083778072069237
Private key: 173448309040289888328993883042709949325
C:\herongjava RsaKeyGenerator 256
p: 248658744261550238073459677814507557459
q: 248658744261550238073459677814507557527
m: 618311710977310434529034534762836648859088873902738200302650613...
Modulus: 618311710977310434529034534762836648864062048787969205064...
Key size: 256
Public key: 394190853336940694532345943348534965939075733405768734...
Private key: 21429568381701961014089098585280129682302896350728470...
update() adds data to the Cipher’s internal buffer, then returns all currently completely encoded blocks. If there are any encoded blocks left over, they remain in the Cipher’s buffer until the next call, or a call to doFinal(). This means that if you call update() with a four byte array to encrypt, and the buffer size is eight bytes, you will not receive encoded data on the return (you’ll get a null instead). If your next call to update() passes five bytes of data in, you will get an 8 byte (the block size) array back, containing the four bytes passed in on the previous call, the first four bytes from the current call – the remaining byte from the current call is left in the Cipher’s buffer.
doFinal() on the other hand is much simpler: it encrypts the passed data, pads it out to the necessary length, and then returns it. The Cipher is essentially stateless.
来自
DH算法的中间人攻击
在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
优缺点:
1、 仅当需要时才生成密钥,减小了将密钥存储很长一段时间而致使遭受攻击的机会。
2、 除对全局参数的约定外,密钥交换不需要事先存在的基础结构。
然而,该技术也存在许多不足:
1、 没有提供双方身份的任何信息。
2、 它是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥。受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在做真正的工作。
3、 没办法防止重演攻击。
4、 容易遭受中间人的攻击。第三方C在和A通信时扮演B;和B通信时扮演A。A和B都与C协商了一个密钥,然后C就可以监听和传递通信量。中间人的攻击按如下进行:
(1) B在给A的报文中发送他的公开密钥。
(2) C截获并解析该报文。C将B的公开密钥保存下来并给A发送报文,该报文具有B的用户ID但使用C的公开密钥YC,仍按照好像是来自B的样子被发送出去。A收到C的报文后,将YC和B的用户ID存储在一块。类似地,C使用YC向B发送好像来自A的报文。
(3) B基于私有密钥XB和YC计算秘密密钥K1。A基于私有密钥XA和YC计算秘密密钥K2。C使用私有密钥XC和YB计算K1,并使用XC和YA计算K2。
(4) 从现在开始,C就可以转发A发给B的报文或转发B发给A的报文,在途中根据需要修改它们的密文。使得A和B都不知道他们在和C共享通信。
看看你的手机
例如
53
就是手机键5的第三个字母
J
K
L
中的
L
所以53就是L
然后把电脑键盘上的字母用QWERTY....用ABCDEF...对应
字母对应另外一套字母
叫做QWE=ABC转换