本文目录一览:
- 1、des的密钥长度是多少bit
- 2、des密钥长度是多少位
- 3、72位密钥是什么密码
- 4、PHP des3加密key长度不到24位怎么办
- 5、关于php des 加密 密钥长度问题
- 6、密码技术(三、二)之对称密码(DES)
des的密钥长度是多少bit
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。
与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。
DES用软件进行解码需要用很长时间,而用硬件解码速度非常快。
但幸运的是当时大多数黑客并没有足够的设备制造出这种硬件设备。
在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密。
而且需要12个小时的破解才能得到结果。
所以,当时DES被认为是一种十分强壮的加密方法。
1. 用密钥K1进行DEA加密。
2. 用K2对步骤1的结果进行DES解密。
3. 用步骤2的结果使用密钥K1进行DES加密。
这种方法的缺点,是要花费原来三倍时间,从另一方面来看,三重DES的112位密钥长度是很“强壮”的加密方式了
des密钥长度是多少位
56位
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。
72位密钥是什么密码
加密体系归属
DES属于分组加密法,WC3属于流加密法。
DES分组为64位,即每次加密需要8个字节。
WC3内核采用CRC8算法,故分组为8位,即每次加密只需要1个字节。
DES为固定分组,WC3可根据内核的变化得到不同的分组数据位数。
例WC3采用CRC64时,分组也随之变为64位. 故WC3的分组位数由CRCn(n=4,8,12,16,32,64,128,...)决定。
2.密钥长度
DES的密钥长度为56位(64-8),WC3的密钥长度与CRCn算法有关。
内核为CRC8的WC3密钥长度为112位。以下所有对比将全部采用CRC8的WC3或WC38。
3.子密钥的产生
DES主密钥为56位,产生16轮每轮48位的子密钥。用以和半组32位明文每轮的混淆。
WC3主密钥为112位,产生结构对称的8对密钥流,其中1对各为32位密钥流,其他都为8位密钥流。
由于流密码的原因,WC3的“轮”即为每次的加密和解密过程。每轮8对密钥流以不同方式和方向环移不同的位数。
每轮参与直接作用的密钥即为本轮的子密钥。WC3每轮的子密钥为72位。
4.算法的f函数
f函数是DES加密法中最重要的部分,其重点就是S盒。其次是扩展及压缩置换。
CRC8正运算函数和CRC8逆运算函数是WC3密码不可缺少的部分,它同时具备了S盒和扩展作用。
DES右半部分明文数据为32位,每轮子密钥的长度为48位,且每个S盒位6入4出,8个S盒共需48位输入,故必须将明文
扩展到48位才能与子密钥混淆,进入S盒进行非线性置换。
DES的32位明文经过扩展置换后为48位,原明文的一半即16位与密钥中的16位作用,原明文的另一半16位要同32位
密钥作用。
DES的S盒实际类同CRC4,它与CRC4同属于0~15全排列表即16!=20922789888000个表。
用矩阵的行列表示为15!行16列,即DES和CRC4的S盒“祖宗”是个1307674368000行16列的矩阵。
每个S盒为4行16列,8个S盒也不过32行16列。
CRC4每个CRC权对应1个S盒,共16个S盒,每个S盒为16*16的矩阵,共256行16列,是DES的S盒的8倍。
WC3的S盒就是CRC8,每个CRC权对应1个S盒,共256个S盒,每个S盒为256*256的矩阵,共65536行256列。
DES的扩展置换实际是明文1个字节扩展半字节即扩展0.5倍,WC3采用明文与初值组合扩展256倍的方法。
DES的压缩置换实际所有S盒4*8=32位出口的32位置换即交换,所谓压缩是指S盒的48位入32位出的结果。
同理WC3在CRC8出入的关系是(8位明文+8位初值+8位权)24入8出(8位密文),实际也是所谓的压缩。
DES的S盒和CRC的S盒的根本区别在于前者是所谓的“非线性”即不好用函数表述及实现,后者可用函数表述和实现。
5.算法的实现过程
DES和WC3都是对称密码体系,即加密和解密共用同一密钥。
DES的加密和解密算法相同,不同的是子密钥每轮次序的不同。
WC3的加密和解密算法不同,子密钥流每轮次序相同。
WC3的加密过程为CRC8的正运算函数即CRC8编码矩阵的查表过程。(对称矩阵)
WC3的解密过程为CRC8的逆运算函数即CRC8解码矩阵的查表过程。(非对称矩阵)
6.安全性
DES设计寿命为10年,但至今还在沿用,说明它设计的合理,虽然S盒之谜留有遗憾。
PHP des3加密key长度不到24位怎么办
php使用3DES 加密时,如果加密用的key长度不足可以使用 “\0”来进行补位。
假设使用了 pkcs#5 填充,key的长度为8位,但是实际给的key只有7位,那么可以使用一个 “\0”进行补位。如图:
其他情况,可以以此类推。
关于php des 加密 密钥长度问题
php5.6的key长度要求是32字节的,你这个明显不满足要求的。
参考以下写法:
?php
# --- ENCRYPTION ---
# the key should be random binary, use scrypt, bcrypt or PBKDF2 to
# convert a string into a key
# key is specified using hexadecimal
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
# show key size use either 16, 24 or 32 byte keys for AES-128, 192
# and 256 respectively
$key_size = strlen($key);
echo "Key size: " . $key_size . "\n";
$plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
# create a random IV to use with CBC encoding
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
# creates a cipher text compatible with AES (Rijndael block size = 128)
# to keep the text confidential
# only suitable for encoded input that never ends with value 00h
# (because of default zero padding)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
# prepend the IV for it to be available for decryption
$ciphertext = $iv . $ciphertext;
# encode the resulting cipher text so it can be represented by a string
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === WARNING ===
# Resulting cipher text has no integrity or authenticity added
# and is not protected against padding oracle attacks.
# --- DECRYPTION ---
$ciphertext_dec = base64_decode($ciphertext_base64);
# retrieves the IV, iv_size should be created using mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
# retrieves the cipher text (everything except the $iv_size in the front)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
# may remove 00h valued characters from end of plain text
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?
密码技术(三、二)之对称密码(DES)
——用相同的密钥进行加密和解密
此次主要介绍比特序列运算和XOR(异或)运算。这两种运算在计算机数据处理中经常出现,因此大家应该在此属性他们。
DES(Data Encryption)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS46-3)。DES一直以来被美国及其他国家的政府和银行等广泛使用。
随着计算机的进步,现在DES已经能够被暴力破解,强度大不如前了。20世纪末,RSA公司举办过破译DES密钥的比赛,我们可以看一看RSA公司官方公布的比赛结果:1997年的DES Challenge I 中用了96天破译密钥,1998年的DES Challenge II-1中用了41天,1998年的DES Challenge II-2中用了56小时,1999年的DES Challenge III 中只用了22小时15分钟。-phpdes密钥长度
由于DES的密文可以在短时间内被破译,因此除了用它来解密一起的密文以外,现在我们不应该再使用DES了。
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥的长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。-phpdes密钥长度
DES 是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为 分组 ,一般来说,以分组为单位进行处理的密码算法称为 分组密码 ,DES就是分组密码的一种。
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为 模式 。
DES的基本结构是由Horst Feistel设计的,因此也称为 Feistel网络(Feistel network) 、Feistel结构(Feistel structure)或者Feistel密码(Feistel cipher)。这一结构不仅被用于DES,在其他很多密码算法中也有应用。-phpdes密钥长度
Feistel网络中,加密的各个步骤称为轮,整个加密过程就是进行若干次轮的循环,下图,展现的是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。
但是,这样看来,“右侧”根本没有加密,因此我们需要用不同的子密钥对一轮的处理重复若干次,并在没两轮处理指间将左侧和有责的数据对调。
上图展现了一个3轮的Feistel网络,3轮加密计算需要进行两次左右对调。对调只在两轮指间进行,租后一轮结束不需要对调。
那么,Feistel网络如何解密呢?
如上图所示,通过上述操作都能够将密文正确的还原明文。
有多轮的情况也是一样的,也就是说,Feistel网络的解密操作,只要按照相反的顺序来使用子密钥就可以完成了,而Feistel网络本身的结构,在加密和解密都是完全相同的。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著