Login
网站首页 > 文章中心 > 其它

php生成秘钥和公钥_php生成公钥私钥

作者:小编 更新时间:2023-08-02 13:29:34 浏览量:342人看过

php 怎么生成rsa加密的公钥和私钥

附上出处链接:

四,用PHP生成密钥

PEAR::Crypt_RSA的Crypt_RSA_KeyPair类可以生成密钥.调用步骤如下:

require_once('Crypt/RSA.php');

$math_obj = Crypt_RSA_MathLoader::loadWrapper();

$key_pair = new Crypt_RSA_KeyPair($key_lenth);

php生成秘钥和公钥_php生成公钥私钥-图1

if (!$key_pair-isError()){

$public_key = $key_pair-getPublicKey();

$private_key = $key_pair-getPrivateKey();

}

hexstr()是自己添加的函数,用来把十进制字符串转换为十六进制.对Crypt_RSA_Math_GMP很简单,只需:

php生成秘钥和公钥_php生成公钥私钥-图2

function hexstr($num){

对Crypt_RSA_Math_BCMath略麻烦些:

$result = '';

do{

}while(bccomp($num, 0));

return ltrim($result,'0');

五,用php生成密钥(二)

generate()生成密钥的算法是依次计算p,q,n,e,d.所以呢做了如下改动,以便可以自己选e值:

原来的:

function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '')

改后增加一个参数e:

function Crypt_RSA_KeyPair($key_len, $e = null, $wrapper_name = 'default', $error_handler = '')

这个函数调用generate().效应地:

function generate($key_len = null)

也增加一个参数e:

function generate($key_len = null, $e = null)

$e = $this-_math_obj-nextPrime($this-_math_obj-dec($e));//取个素数

else

{

while(true)

$e = $this-_math_obj-getRand($q_len, $this-_random_generator);

continue;

$e = $this-_math_obj-nextPrime($this-_math_obj-dec($e));

break;

$p = $this-_math_obj-getRand($p_len, $this-_random_generator, true);

$p = $this-_math_obj-nextPrime($p);

php生成秘钥和公钥_php生成公钥私钥-图3

$q = $this-_math_obj-getRand($q_len, $this-_random_generator, true);

$tmp_len = $this-_math_obj-bitLen($this-_math_obj-mul($p, $q));

if ($tmp_len $key_len)

$q_len++;

elseif ($tmp_len $key_len)

$q_len--;

} while ($tmp_len != $key_len);

$q = $this-_math_obj-nextPrime($q);

$tmp = $this-_math_obj-mul($p, $q);

} while ($this-_math_obj-bitLen($tmp) != $key_len);

// $n - is shared modulus

$n = $this-_math_obj-mul($p, $q);

// generate public ($e) and private ($d) keys

$pq = $this-_math_obj-mul($this-_math_obj-dec($p), $this-_math_obj-dec($q));

if($this-_math_obj-isZero($this-_math_obj-dec($this-_math_obj-gcd($e, $pq))))

}while(true);

六,干什么用

加密比较重要的数据.比如注册时用户输入的密码.

登录时把密码hmac一下就可以防止重放攻击(replay attack)了.对注册不存在这种攻击,但有密码泄露的危险.上传密码hash那点安全性根本不算什么.这个可以用RSA加密解决.

不过,对中间人攻击还是没办法.

另外一个

用PHP如何实现数字签名啊--跪求高人指点---

以下是资料:

php中数字签名与校验

① 先用php生成一对公钥和私钥

$res = openssl_pkey_new();

openssl_pkey_export($res,$pri);

$d= openssl_pkey_get_details($res);

$pub = $d['key'];

var_dump($pri,$pub);

输出依次为私钥和公钥的pem字串,如:

mmlSmN1enhoCUqc=

-----END PRIVATE KEY-----

"

-----END PUBLIC KEY-----

$res = openssl_pkey_get_private($pri);

if (openssl_sign('hello', $out, $res))

$res = openssl_pkey_get_public($pubkey);

if (openssl_verify('hello', $sig, $res) === 1)

; // 通过验证

php中这种签名使用的是RSA算法;数字签名可以在 单点登录 等系统中派上用场.

php 如何生成2048的私钥和1024的公钥长度

以下命令来生成密钥对.

-out private_key.pem -nocrypt

这个命令得到的公共密钥.

$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

我写了两方法读取私钥和公钥

分别.public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {

File f = new File(filename);

FileInputStream fis = new FileInputStream(f);

DataInputStream dis = new DataInputStream(fis);

byte[] keyBytes = new byte[(int) f.length()];

dis.readFully(keyBytes);

dis.close();

String temp = new String(keyBytes);

String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");

privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");

//System.out.println("Private key\n"+privKeyPEM);

KeyFactory kf = KeyFactory.getInstance(algorithm);

return kf.generatePrivate(spec);

public PublicKey getPemPublicKey(String filename, String algorithm) throws Exception {

String publicKeyPEM = temp.replace("-----BEGIN PUBLIC KEY-----\n", "");

publicKeyPEM = privKeyPEM.replace("-----END PUBLIC KEY-----", "");

return kf.generatePublic(spec);

php rsa怎么生成公钥和私钥

PHP 加密:AES & RSA

最近两年一直从事与金融相关项目的开发与维护.但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结.恰逢最近看了<<图解密码技术>>一书,对 PHP 加解密有了更深刻的认识.

为了避免各位看枯燥的文字理论,开篇我就把总结给出:

第一段:对称加密

对称加密的特点是加解密速度快,加密后的密文强度目前还没有硬解的可能性.但是,在未来随着计算机性能的提升有可能会出现被破解的可能性.

对称加密的缺点也很明显.对称加密的加密过程与解密过程使用的是同一把密钥.一旦泄漏密钥,加密就失去了任何意义.

根据<<图解密码技术>>一书的推荐,对称加密目前推荐使用 AES.在 PHP 当中要实现 AES 加解密,是使用 openssl 扩展来实现.所以,请确保你的 PHP 已经开启了 openssl 扩展.

可以通过如下方式检测:

或者如下方式检测:

AES 的加密模式属于分组密码模式.所谓分组密码,是加密时把明文按照固定的长度分组,然后再进行加密.当然,细节之处很很多不同.AES 分组模式有多种:ECB、CBC、CFB、OFB、CTR 五种分组模式.目前优先推荐使用 CBC 模式.

如果使用 CBC 模式,那么在加密的时候,就需要一个前置的加密向量 IV.当初博主在使用 AES 来加密的时候,就很奇怪一个对称加密为何要这个向量.因为,在博主寒冰的潜意识里,对称加密只需要一个密钥就 Ok 了.没想到 AES 加密还有多种模式,而这个 CBC 模式恰恰就需要一个这样的向量值.关于这个向量大家可以在网上查阅相关的资料.这个东西非常重要,也非常好理解.

关于 PHP AES 加解密会用到的相关方法:

第二段:非对称加密

非对称加密是指公钥加密私钥解密,私钥加密公钥解密的算法.非对称加密的算法有很多.<<图解密码技术>>一书推荐使用 RSA 算法.它使用起来也非常简单.

要使用 RSA 算法.首先,我们必须生成一对公钥私钥.其实生成公钥私钥很简单.

在 Linux 系统,直接使用如下命令生成:

此命令会生 ~/.ssh/ 目录下生成两个文件:

id_rsa 是私钥, is_rsa.pub 是公钥.

关于 PHP RSA 加解密会用到的相关方法:

以上就是土嘎嘎小编为大家整理的php生成秘钥和公钥相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章