相关疑难解决方法(0)

如何使用OpenSSL提取公钥?

以下命令生成一个包含公钥和私钥的文件:

openssl genrsa -des3 -out privkey.pem 2048
Run Code Online (Sandbox Code Playgroud)

来源:这里

使用OpenSSL,私钥也包含公钥信息,因此不需要单独生成公钥

我们如何从privkey.pem文件中提取公钥?

谢谢.

openssl pki public-key-encryption

112
推荐指数
3
解决办法
15万
查看次数

将我的加密库从Mcrypt升级到OpenSSL

我使用下面常用的库进行加密.我想从Mcrypt将其升级到OpenSSL,以便我不再使用已弃用的库.

我试图找出这是否可能.我对此做了一些研究,但我发现了相互矛盾的信息:

这篇文章说,使用用Mcrypt加密的OpenSSL无法解密数据. /sf/answers/1382394611/

但是,这篇文章说可以使用填充.看来我的函数使用了填充.这是否是使这项工作所需的正确填充类型? /sf/answers/2213033931/

<?php 

namespace Utilities\Encryption;

/**
* A class to handle secure encryption and decryption of arbitrary data
*
* Note that this is not just straight encryption.  It also has a few other
* features in it to make the encrypted data far more secure.  Note that any
* other implementations used to decrypt data will have to do the same exact
*  operations.  
*
* Security Benefits:
*
* - Uses Key stretching
* …
Run Code Online (Sandbox Code Playgroud)

php encryption openssl mcrypt

20
推荐指数
1
解决办法
5909
查看次数

用OpenSSL取代Mcrypt

目前我们在我们的系统上有一个mcrypt实现,用于在PHP应用程序中隐藏一些敏感数据.现在我们有了一个新的要求,我们必须将crypt模块更改为openssl.另一件重要的事情是我们使用密码河豚和模式ecb.所以我开始测试有什么区别以及如何使用openssl解密mcrypt加密字符串.

我使用标准的PHP函数:

  • mcrypt_encrypt与openssl_encrypt
  • mcrypt_decrypt与openssl_decrypt

两种方法都会产生不同的结果.第二件事是在两种类型的给定密码(河豚)和模式(ecb)中需要不同的IV长度(openssl = 0和mcrypt = 56).

有没有人知道如何在没有大量迁移工作的情况下轻松更改模块?

提前致谢!

更新:

这是代码,我测试了它:

<?php 

function say($message){
    if(!is_string($message)){
        if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "<pre>";
        echo var_export($message, true) . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
        if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "</pre>";
    }else{
        echo $message . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
    }
}

say("= Begin raw encryption");
$key    = "anotherpass";
$str    = "does it work";

say("  Params:");
say("  - String to encrypt '".$str."'");
say("  - Key: ".$key);
say("");


$params = array(
    "openssl"  => array(
        "cipher"    => "BF",
        "mode" …
Run Code Online (Sandbox Code Playgroud)

php openssl mcrypt

19
推荐指数
2
解决办法
2万
查看次数

准备在PHP 7.2中删除Mcrypt

因此,随着时间的推移,mcrypt将进入PHP 7.2.当然还有另一种选择:openssl.

我发现很难从mcrypt切换到openssl,使用AES 256 CBC并保留IV.我对密码学有点新意,所以我真的不知道所有内容,但我理解基础知识.

假设我有以下代码

function encrypt($masterPassword, $data) 
{
    $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
    $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($iv . $encrypted);
}

function decrypt($masterPassword, $base64) 
{
    $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
    $data = base64_decode($base64);
    $iv = substr($data, 0, $ivSize);
    $encrypted = substr($data, $ivSize, strlen($data));
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
    return trim($decrypted); …
Run Code Online (Sandbox Code Playgroud)

php openssl mcrypt php-7.1

7
推荐指数
1
解决办法
6752
查看次数

如何使用PyOpenSSL获取公钥?

我想创建python脚本,这将采用PKCS#12包并打印x509证书中包含的一些信息并用于此purpouse PyOpenSSL模块.到目前为止,我想从证书公钥中获取.但是PKey对象没有合适的方法.我可以从哪里搬出去?任何想法如何获得公钥?

pfx=open('./1.p12','rb').read()
PKCS=crypto.load_pkcs12(pfx)
cert=PKCS.get_certificate()
PKey=cert.get_pubkey()

print PKey
<OpenSSL.crypto.PKey object at 0x012432D8>
Run Code Online (Sandbox Code Playgroud)

谢谢.

python x509 public-key

6
推荐指数
2
解决办法
5017
查看次数