标签: php-openssl

将C#函数加密和解密转换为PHP函数

我想将C#函数转换为PHP函数.以下是C#中Function的链接:https://stackoverflow.com/a/19441805/3581428

public static string Encrypt(string clearText)
{
    string EncryptionKey = "MAKV2SPBNI99212";
    byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
    using (Aes encryptor = Aes.Create())
    {
        Rfc2898DeriveBytes pdb = new 
            Rfc2898DeriveBytes(EncryptionKey, new byte[] 
            { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        encryptor.Key = pdb.GetBytes(32);
        encryptor.IV = pdb.GetBytes(16);
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(clearBytes, 0, clearBytes.Length);
                cs.Close();
            }
            clearText = Convert.ToBase64String(ms.ToArray());
        }
    }
    return clearText; …
Run Code Online (Sandbox Code Playgroud)

php c# encryption php-openssl

10
推荐指数
1
解决办法
4671
查看次数

Php作曲家openssl错误

在询问之前,我不得不说我已经在堆栈和其他地方尝试了每个类似的问题并且失败了.

composer因为这个错误而无法使用:

requires ext-openssl * -> the requested PHP extension openssl is missing from your system.
Run Code Online (Sandbox Code Playgroud)

xamppubuntu.

我尝试过的:

  • 我已经注释掉;extension=php_openssl.dllphp.ini(CLI和正常) -没有工作
  • 通过php外部的终端安装openssl - 没有用
  • 检入phpinfo()是否openssl已加载并激活

在此输入图像描述

  • 还有一些人喜欢php -c /opt/lampp/etc/php.ini composer.phar install在我得到错误的地方奔跑作曲家

PHP Warning: PHP Startup: Unable to load dynamic library /usr/include/php5/ext/php_openssl.so - /usr/include/php5/ext/php_openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0

  • 我曾试图改变PATHbashrc,没有任何成功

我发现奇怪的是扩展的位置...... …

php apache lampp composer-php php-openssl

9
推荐指数
1
解决办法
2138
查看次数

使用php openssl_encrypt的正确方法

我用密码工作的一个项目,我需要就如何一起工作一点帮助openssl_encryptopenssl_decrypt,我只是想知道这样做的最基本,最正确的方法.这是我到目前为止所得到的:

// To encrypt a string

$dataToEncrypt = 'Hello World';

$cypherMethod = 'AES-256-CBC';
$key = random_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cypherMethod));

$encryptedData = openssl_encrypt($dataToEncrypt, $cypherMethod, $key, $options=0, $iv);
Run Code Online (Sandbox Code Playgroud)

我然后存储$cypherMethod,$key$iv在解密时使用$encryptedData.(我们不详细说明如何存储值,谢谢!)

// To decrypt an encrypted string

$decryptedData = openssl_decrypt($encryptedData, $cypherMethod, $key, $options=0, $iv);
Run Code Online (Sandbox Code Playgroud)

首先,上面的示例代码是一个如何使用的正确示例php openssl_encrypt

第二,我的方法是生成$key$iv正确和安全吗?因为我继续阅读,密钥应该是加密安全的.

最后,是不是32-byte需要一个值AES-256-CBC?如果是,那为什么它只openssl_cipher_iv_length()返回int(16)长度?不应该int(32)吗?

php encryption cryptography aes php-openssl

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

提供的密钥参数不能使用Google API强制转换为私钥

我正在尝试测试我在此处找到的这个示例,以便我可以在客户端进行直接上传,而无需用户使用Google云端存储进行登录.

表达的所有常量都有正确的值,路径正确且没有空内容.

我得到的错误:

openssl_sign(): supplied key param cannot be coerced into a private key
Run Code Online (Sandbox Code Playgroud)

我实现的功能是:

public static function storageURL( $id, $method = 'GET', $duration = 10 ) {
    $key = file_get_contents(self::KEY_FILE);
    $pkey = openssl_get_privatekey($key, 'notasecret');
    $expires = time( ) + $duration;
    $content_type = ($method == 'PUT') ? 'application/x-www-form-urlencoded' : ''; 
    $to_sign = ($method . "\n" . 
    /* Content-MD5 */ "\n" . 
    $content_type . "\n" . 
    $expires . "\n" . 
    '/'.self::BUCKET_NAME.'/' . $id); 
    $signature = '*Signature will go here*'; …
Run Code Online (Sandbox Code Playgroud)

php google-cloud-storage php-openssl

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

PHP握手失败TLS1.0

我尝试通过连接fsockopensendm.cert.legalmail.it465端口,是在意大利被称为PEC SMTPS服务.

使用任何版本的PHP我都试过这个片段工作:

<?php
fsockopen('tls://sendm.cert.legalmail.it', 465);
Run Code Online (Sandbox Code Playgroud)

一切都没问题OpenSSL 1.0.2h,如果我升级到OpenSSL 1.0.2j这个片段失败并出现此错误:

    PHP Warning:  fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
    error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure in ~/Development/experimental/php-handshake/connect.php on line 3
    PHP Warning:  fsockopen(): Failed to enable crypto in ~/Development/experimental/php-handshake/connect.php on line 3
    PHP Warning:  fsockopen(): unable to connect to tls://sendm.cert.legalmail.it:465 (Unknown error) in ~/Development/experimental/php-handshake/connect.php on line 3
Run Code Online (Sandbox Code Playgroud)

所以OpenSSL 1.0.2j我尝试通过命令行连接:

openssl s_client -connect sendm.cert.legalmail.it:465
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

我尝试使用testssl在服务器上检查SSL …

php ssl php-openssl

8
推荐指数
1
解决办法
801
查看次数

使用PHP AES CCM模式解密意外的结果

我正在尝试使用AES-256-CCM重现加密操作,该操作目前在Java中与Bouncy Castle提供商一起执行.当使用openssl在PHP中尝试相同的操作时,我找不到一组产生相同输出的参数.

由于最近将AEAD模式添加到PHP(7.1)中,因此文档的工作原理很少.

Java中"工作"加密的最小示例如下所示:

    public static void main(String args[]) {
    try {
        java.security.Security.addProvider(new BouncyCastleProvider());
        byte[] key = Base64.decodeBase64("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=".getBytes());
        byte[] iv = Base64.decodeBase64("rcFcdcgZ3Q/A+uHW".getBytes());

        SecretKey aesKey = new SecretKeySpec(key, 0, key.length, "AES");
        Cipher aesCipher = Cipher.getInstance("AES/CCM/NoPadding", "BC");
        aesCipher.init(1, aesKey, new IvParameterSpec(iv));

        byte[] encrypted = aesCipher.doFinal("test".getBytes());
        System.out.println(Hex.encodeHex(encrypted));

        // Output: 411d89ff74205c106d8d85a8
    }
    catch (Throwable e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我试图使用不同的两个不同的库和语言重新生成它时,我已经将键和iv设置为已知值.

当尝试使用PHP和openssl重新生成它时,我正在尝试使用以下代码

$key = base64_decode("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=");
$iv = base64_decode('rcFcdcgZ3Q/A+uHW');
$data = 'test';
$tag = null;

$encrypted = openssl_encrypt($data,'aes-256-ccm', $key,OPENSSL_RAW_DATA, $iv, $tag,"",8);
echo(bin2hex($encrypted . $tag));
// d1a7403799b8c37240f36edb …
Run Code Online (Sandbox Code Playgroud)

php encryption bouncycastle sjcl php-openssl

8
推荐指数
1
解决办法
296
查看次数

使用X509证书验证SOAP请求

我有一个SOAP服务器.在服务器上接收的SOAP请求具有ws安全头.以下是请求XML的主要节点.

  1. BinarySecurityToken(X509PKIPathv1证书)
  2. DigestMethod
  3. 的DigestValue
  4. 的SignatureValue
  5. SecurityTokenReference

  6. 数据(SOAP主体中客户端发送的数据)

我必须使用客户端(请求的发送者)提供的证书(.cer文件)来验证请求.

验证请求的步骤是什么?请解释一下这个概念.没有可用于执行此操作的库.经过长期的研究,我能比赛后BinarySecurityTokenbase64_encode($certFile)$ certFile是请求者的certifiate.现在我正在研究如何匹配DigestValue什么.

.net java openssl ssl-certificate php-openssl

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

调用未定义的函数Illuminate\Encryption\openssl_decrypt()

我正在使用xampp和windows以及laravel,一切都运行良好,但是当我完成工作并转向xampp并尝试今天早上打开我的工作时,这就是我得到的:

FatalThrowableError in Encrypter.php line 100:
Fatal error: Call to undefined function Illuminate\Encryption\openssl_decrypt()
Run Code Online (Sandbox Code Playgroud)

Encrypter.php是一个标准的laravel文件,我甚至没有触及它.我的分机已开启.

延长= php_openssl.dll

可能有什么问题?

php encryption laravel php-openssl

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

用openssl_encrypt替换mcrypt_encrypt

你们可能知道,扩展名mcrypt将在php 7.1上弃用.

我用来维护一个"遗留"应用程序,我想最终迁移到这个版本,所以我运行测试并验证我不能再获得100%的覆盖率,因为有一段代码使用以下代码:

$key = 'sA*(DH';

// initialization vector
$iv = md5(md5($key));
$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string,     MCRYPT_MODE_CBC, $iv));
Run Code Online (Sandbox Code Playgroud)

我试图使用此代码将此段代码移植到openssl_encrypt

$key = md5('sA*(DH');
$iv = md5($key);
echo base64_encode(openssl_encrypt($data, "aes-256-cbc", $key, OPENSSL_RAW_DATA, $iv));
Run Code Online (Sandbox Code Playgroud)

但我有两个问题:

  1. IV长度应该是16个字符(md5给我32个),所以我得到一个PHP警告
  2. 它的输出不一样(即使我截断为16个字符)

任何人都有类似的问题(或知道如何解决它?)

顺便说一句:我正在使用PHP的开发大师版本(假设是7.1.0 alpha 3).

php mcrypt php-openssl

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

使用openssl使用PHP验证RRSIG

我正在尝试进行RRSIG验证,我正在尝试在PHP中使用openssl lib.但我有一个问题是将公钥传递给该openssl_verify函数.

这是一个基本代码,使用Net/DNS2库通过DNSSEC选项执行DNS查询.并获得DNSKEY和RRSIG.

<?php

require_once 'Net/DNS2.php';

$r = new Net_DNS2_Resolver(array('nameservers' => array('127.0.0.1')));
$r->dnssec = true;

try {
        $result = $r->query('ip4afrika.nl', 'DNSKEY');

} catch(Net_DNS2_Exception $e) {

        echo "::query() failed: ", $e->getMessage(), "\n";
        die(); // 
}

// print_r($result->answer);

$public_key_bin = base64_decode( $result->answer[0]->key ) ;
$public_key_str = $result->answer[0]->key; //echo $public_key_str; die();
// $public_key_res = openssl_x509_parse($public_key_bin);
$public_key_res = openssl_x509_read($public_key_str);
// $public_key_res = openssl_pkey_get_public($public_key_str);

while ($msg = openssl_error_string()) echo $msg . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息,

使用时:

$public_key_res = openssl_x509_read($public_key_str);

 PHP Warning:  openssl_x509_read(): supplied …
Run Code Online (Sandbox Code Playgroud)

php php-openssl dnssec

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