常见密码算法原理

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-14
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是最后产生的密钥。
https://segmentfault.com/a/1190000004261009

下面我们以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)。

来自 http://www.cnblogs.com/fishou/p/4206451.html

https://zh.wikipedia.org/wiki/SHA%E5%AE%B6%E6%97%8F

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:\herong>java RsaKeyGenerator 128
p: 17902136406704537069
q: 17902136406704537077
m: 320486487924256034368552058949822333168
Modulus: 320486487924256034404356331763231407313
Key size: 128
Public key: 138184930940463531660820083778072069237
Private key: 173448309040289888328993883042709949325
C:\herong>java RsaKeyGenerator 256
p: 248658744261550238073459677814507557459
q: 248658744261550238073459677814507557527
m: 618311710977310434529034534762836648859088873902738200302650613...
Modulus: 618311710977310434529034534762836648864062048787969205064...
Key size: 256
Public key: 394190853336940694532345943348534965939075733405768734...
Private key: 21429568381701961014089098585280129682302896350728470...

https://security.stackexchange.com/questions/90169/rsa-public-key-and-private-key-lengths
https://stackoverflow.com/questions/2921508/trying-to-understand-java-rsa-key-size >

http://www.herongyang.com/Cryptography/RSA-BigInteger-Keys-Generated-by-RsaKeyGenerator-java.html

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.

来自 https://segmentfault.com/a/1190000006931511

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共享通信。

1. MD5密码算法:MD5(Message-Digest Algorithm 5)是一种常见的密码算法,它可以将任意长度的消息(字符串)生成128位的散列值。MD5算法特点是原始数据无论多长,生成的结果长度固定,散列值唯一。但是这种算法已经被证明存在安全问题,不再建议使用。2. SHA密码算法:SHA(Secure Hash Algorithm)是一种密码算法,它可以将任意长度的消息(字符串)生成固定大小的散列值,最常见的是SHA-1、SHA-256、SHA-384和SHA-512。SHA算法的特点是散列值唯一、不可逆,且不同输入的散列值必然不同。SHA算法被广泛应用于数字签名、消息验证等安全领域。3. DES密码算法:DES(Data Encryption Standard)是一种对称加密算法,它使用相同的密钥加密和解密数据,密钥长度为56位。DES算法广泛应用于网络安全、数据加密、电子支付等领域。但是由于密钥长度较短,容易被暴力破解,因此已经不再推荐使用。4. RSA密码算法:RSA是一种非对称加密算法,它需要一对公钥和私钥来加密和解密数据。RSA算法的特点是安全性高,密钥长度可以灵活调整,用于数字证书、加密通信等领域。但是由于加解密速度慢,不适合大量数据的加密和解密。5. Base64编码:Base64是一种编码算法,可以将任意的二进制数据编码成纯文本格式,常用于电子邮件、网页传输等场景中。Base64编码不是一种加密算法,但可以让数据不易被识别和读取。Base64编码不需要密钥,编码和解码速度快,但是编码后的数据长度会增加。

  • 常见密码算法原理
    答:1. MD5密码算法:MD5(Message-Digest Algorithm 5)是一种常见的密码算法,它可以将任意长度的消息(字符串)生成128位的散列值。MD5算法特点是原始数据无论多长,生成的结果长度固定,散列值唯一。但是这种算法已经被证明存在安全问题,不再建议使用。2. SHA密码算法:SHA(Secure Hash Algorithm)是一种...
  • 加密算法有几种基于什么原理
    答:2、非对称算法 常见的非对称加密算法如下:RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。算法原理——椭圆...
  • 常见的加密算法、原理、优缺点、用途
    答:1.对称加密算法采用单密钥加密,在通信过程中,数据发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密后,发送给接收方 2.接收方收到加密后的报文后,结合解密算法使用相同密钥解密组合后得出原始数据。图示:非对称加密算法采用公钥和私钥两种不同的密码来进行加解密。公钥和私钥是成对存在...
  • 密码解密主要是用运用什么原理?
    答:栅栏易位法。即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。撒移位密码。也就是一种最简单的错位法,将字母表前移或者后错几位。进制转换密码。比如给你一堆数字,乍一看头晕晕的,你可以观察数字的规律,将其转换为10进制数字,然后按照每个数字...
  • 常见加密算法原理及概念
    答:对称加密算法对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:DES(DataEncryptionStandard):数据加密标准,速度较快,适用于加密大量数据的场合。对称密钥加密SymmetricKeyAlgorithm又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的...
  • 密码学中有几种、他们的原理和区别,优缺点是什么
    答:,Grille密码 ,VIC密码 (一种复杂的手工密码,在五十年代早期被至少一名苏联间谍使用过,在当时是十分安全的) 现代加密:加密散列函数 (消息摘要算法,MD算法)加密散列函数 消息认证码 Keyed-hash message authentication code EMAC (NESSIE selection MAC)HMAC (NESSIE selection MAC; ISO/IEC 9797-1, ...
  • 有多少种密码方式?除了摩斯密码外还有什么密码?
    答:2、ECC加密法密码 ECC算法也是一个能同时用于加密和数字签名的算法,也易于理解和操作。同RSA算法是一样是非对称密码算法使用其中一个加密,用另一个才能解密。3、三分密码 首先随意制造一个3个3×3的Polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个...
  • RSA 算法的加密原理是什么?
    答:首先,RSA算法的核心原理基于两个质数p和q的乘积n(n = p * q),其独特性在于我们能轻易计算出n,但要分解n为p和q却异常困难。正是这种特性,构成了RSA加密的基础。具体来说,一个信息m通过密钥e进行加密,得到c,计算公式为:(m^e) mod n = c。相反,解密时使用一个私钥d,使得(c^d) ...
  • 什么是密码加密?
    答:数据存储加密技术的目的是防止在存储环节上的数据失密,数据存储加密技术可分为密文存储和存取控制两种。前者一般是通过加密算法转换、附加密码、加密模块等方法实现;后者则是对用户资格、权限加以审查和限制,防止非法用户存取数据或合法用户越权存取数据。常见加密算法 1、DES(Data Encryption Standard):...
  • 加密算法的基本原理是什么?
    答:e的一个置换f。然后按照公式Yi+ne=Xf(i)+ ne,(其中i=1,…e;n=0,1,…)将明文X1X2X3…加密为密文Y1Y2Y3…。解密过程则按照下式进行:Xj+ne=Yf-1(j)+ ne,(其中j=1,…e;n=0,1…)。明文:COMPUTER CRAPHICS MAY BE SLOW BUT ATLEASTTIE’S EXPENSIVEC O M P U T ...