关于php des 加密 密钥长度问题

作者&投稿:剧虽 (若有异议请与网页底部的电邮联系)
PHP des3加密key长度不到24位怎么办~

php使用3DES 加密时,如果加密用的key长度不足可以使用 “\0”来进行补位。
假设使用了 pkcs#5 填充,key的长度为8位,但是实际给的key只有7位,那么可以使用一个 “\0”进行补位。如图:

其他情况,可以以此类推。

两个函数如下:
加密函数:encrypt
function encrypt($encrypt,$key="") {
$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB ), MCRYPT_RAND );
$passcrypt = mcrypt_encrypt ( MCRYPT_RIJNDAEL_256, $key, $encrypt, MCRYPT_MODE_ECB, $iv );
$encode = base64_encode ( $passcrypt );
return $encode;
}

解密函数:decrypt
function decrypt($decrypt,$key="") {
$decoded = base64_decode ( $decrypt );
$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB ), MCRYPT_RAND );
$decrypted = mcrypt_decrypt ( MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_ECB, $iv );
return $decrypted;
}

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";
?>

mcrypt_encrypt函数的参数key是一个数字,表示长度。比如你要加密的是123456,那这个参数你就传6,表示加密的字符串的长度是6,而不是123456.


科尔沁右翼前旗18424233907: 关于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 ...

科尔沁右翼前旗18424233907: 对称加密算法中,des算法的密钥长度是多少,采用什么进行加密 -
植纯加味: DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码.与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来.DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,但幸运的是当时大多数黑...

科尔沁右翼前旗18424233907: PHP DES加密函数 -
植纯加味: 两个函数如下:加密函数:encrypt function encrypt($encrypt,$key="") { $iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB ), MCRYPT_RAND ); $passcrypt = mcrypt_encrypt ( MCRYPT_RIJNDAEL...

科尔沁右翼前旗18424233907: DES加密算法的密钥长度是56位还是64位 -
植纯加味: 密钥56位,还有附加的8位校验位

科尔沁右翼前旗18424233907: DES加密算法采用的密钥长度和分组长度各是多少,还有哪些加密算法与其类似? -
植纯加味: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.

科尔沁右翼前旗18424233907: DES、RSA的明文长度和密文长度分别是多少?
植纯加味: 加密的明文长度不能超过RSA密钥的长度-11,比如1024位的,明文长度不能超过117. 密文的长度总是密钥的长度的一半,比如1024位的,密文长度是64,如果是1032位,密文长度是65位.

科尔沁右翼前旗18424233907: php 如何限制密码长度 -
植纯加味: <form action="" method="get"><br>pass: <input type="password" name="pass"> 限制六位 <br><input type="submit" value="提交"><br></form><br><?php<br>$a=isset($_GET["pass"])?$_GET["pass"]:'';<br>if ($a!=''){<br> ...

科尔沁右翼前旗18424233907: des不足64位 怎么加密 -
植纯加味: 我见过的都是算成 32 个字符的,也就是 128位.好像也有别的版本,可以得到 16 个字符,24个字符等等.MD5是摘要算法,是不可逆的.我觉得加密总得对应一个解密,可以得到原来的信息,但是MD5不可以,所以MD5不是加密算法.希望回答能给你带来帮助~ 如果满意,请采纳,如还有疑问,可继续追问!您也可以向我们团队发出请求,会有更专业的人来为您解答!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网