×

phpdes密钥长度

phpdes密钥长度(des子密钥长度)

admin admin 发表于2023-04-05 09:01:09 浏览73 评论0

抢沙发发表评论

本文目录一览:

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网络本身的结构,在加密和解密都是完全相同的。

该系列的主要内容来自《图解密码技术第三版》

我只是知识的搬运工

文章中的插图来源于原著