很多站长朋友们都不太清楚scryptphp,今天小编就来给大家整理scryptphp,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 关于php des 加密 密钥长度问题 2、 夸克区块链 3、 莱特币是什么 4、 PBKDF2函数,比「Hash加盐」更好的口令保护方案 关于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";
?>
夸克区块链夸克区块链(Quarkblockchain/QKI)是Chance Boat Internet Technology Ltd (Seychelles) 主导开发和维护的区块链项目。
本项目17年11月底开始开发,2018年2月8日正式上线,已经有上万名活跃用户。
夸克区块链是世界上第一款基于PHP开发/运行的区块链,数据交换使用http+json,存储层使用mysql,加密使用比特币钱包协议。
夸克区块链的目标是提供一个分布式web、文件网络平台,让开发者可以在这个网络平台开发、运行DApp。
夸克区块链官网:
莱特币是什么Litecoin(中文译名:莱特币)是一种基于“点对点”(peer-to-peer)技术的网络货币,它可以帮助用户即时付款给世界上任何一个人。Litecoin受到了比特币(BTC)的启发,并且在技术上具有相同的实现原理,Litecoin的创造和转让基于一种开源的加密协议,不受到任何中央机构的管理。
;redirect_uri=http%3A%2F%2Fapi.m.duoku测试数据%2Fopenlogin%2Flogin.php%3Fa%3Dcallback%26type%3Dbaiduresponse_type=codedisplay=mobileqq-pf-to=pcqq.c2c
PBKDF2函数,比「Hash加盐」更好的口令保护方案在前面两篇文章中,对用户口令进行加密的方式其实称为 Password-based encryption (PBE),算法实现很简单,那是不是有更好和更标准的 PBE 实现呢?
基于 Hash+salt 的算法最大的问题在于 Hash 函数的运算太快了,虽然加盐让暴力攻击和彩虹表攻击的可行性大大减低,但现在攻击者能在非常快速的硬件(包括 GPU)上运行,如果 时间足够 ,还是有很大几率完成暴力破解。
那有没有更好的解决方案吗?如果让口令运算运算的慢一点,那么攻击者破解的速度也将上不去,这样是否就能更好的保护明文口令?
在密码学中,key derivation function (KDF) 函数非常重要,它可以通过一个 master key(在 HTTPS 中用的非常多)、口令(password)、passphrase(密码学随机数生成器)生成一个或多个强壮的密钥,这些密钥本身被密码学算法使用(比如 AES、RSA 等等)。
用户的口令通过 PBF(前两篇文章讲解的算法实现)生成的口令密文不是密钥,所以最终结果不是用于密码学用途,是为了避免口令被破解,但本质上 BPF 算法也可以通过 KDF 函数实现,也就是利用 KDF 函数生成口令密文。
KDF 同样基于 Hash 函数,也有 salt 机制,当然最重要的是有 迭代因子 这个概念,有了迭代因子,会让处理速度变慢,减少爆破风险。
KDF 主要有三种实现,分别是 PBKDF2、bcrypt、scrypt ,这篇文章主要讨论 PBKDF2。
稍微休息下,希望大家理解上述概念之间的区别。
KDF 本质上属于 Key stretching、key strengthening,如果你了解 HTTPS,那么可能比较熟悉,比如在握手阶段,HTTPS 将 Premaster Secret 和客户端服务器端的随机数导出为 Master Secret,然后再将 Master Secret 导出为多个密钥块,这些密钥块包含 AES 的加密密钥或者初始化向量,用户后续通信数据的加密和完整性保护。
PBE 算法标准定义在 RFC 2898 文档中,大概的公式如下:
如果 c 的数值越大,那么运算速度就越慢,增加了时间复杂度,攻击者破解的成功率就会下降。
使用 PHP 语言说明 PBKDF2 函数的使用:
对这个过程循环2000次,总共需要 16秒 ,而如果运行简单的 Hash+salt,循环2000次,运行时间不到 0.1秒 。
从这个角度看,建议大家使用 PBKDF2 保护你的口令,但现在业界的保护口令的标准算法是 bcrypt ,下一篇文章会讲解。
口令保护系列文章:
了解我的书 《深入浅出HTTPS:从原理的实战》 ,如果觉得还不错,还请在豆瓣上做个评论(地址: )。
关于scryptphp的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。