我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密。PHP 使用 OpenSSL 库,Node.js 解密基于实现的加密。问题是 Node.js 中解密的文本只是部分正确。
function encrypt($text, $pw, $base64 = true) {
$method = 'aes-256-cbc';
$iv_len = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($iv_len);
$pw = substr(md5($pw),0,32);
$cipher = openssl_encrypt ($text ,$method ,$pw ,!$base64 ,$iv );
if($base64) {
$pw = base64_encode($pw);
$iv = base64_encode($iv);
}
return array(
'iv' => $iv,
'pw' => $pw,
'text' => $text,
'cipher' => $cipher
);
}
Run Code Online (Sandbox Code Playgroud)
var cipher = new Buffer(data.cipher, 'base64');
var iv …Run Code Online (Sandbox Code Playgroud) $ publicKey =“ ../ssh/public/pub”; $ plaintext =“要加密的字符串”;
$pubKey = openssl_pkey_get_public($publicKey);
openssl_public_encrypt($plaintext, $encrypted, $pubKey);
echo $encrypted; //encrypted string
Run Code Online (Sandbox Code Playgroud)
上面的代码生成以下错误
openssl_public_encrypt()[http://php.net/function.openssl-public-encrypt]:密钥参数不是有效的公用密钥[APP / controllers / supportservice_controller.php,第144行]
我使用以下命令使用openssl创建了密钥:
生成一个1024位的rsa私钥,要求输入密码以对其进行加密并将其保存到文件openssl genrsa -des3 -out / path / to / privatekey 1024
生成专用密钥的公用密钥并保存到文件
openssl rsa -in / path / to / privatekey -pubout -out / path / to / publickey
我可以连接到 SSL 站点,通过 HTTPS 通过命令行安装 Composer。检查了 OPENSSL 版本SSL Version => OpenSSL/1.0.1j。那么问题出在哪里呢?想法?
这是原始输出。
[kunaaljain@localhost php]$ /opt/lampp/bin/php-5.6.3 composer.phar diagChecking composer.json: FAIL
the property name is required
the property description is required
No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity: FAIL
[Composer\Downloader\TransportException] The "https://packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate …Run Code Online (Sandbox Code Playgroud) 我试图找出一种有效/优雅的方法来验证用户上传的文件是否是有效的 pem 文件,而无需依赖于扩展名的验证。任何人都可以做到这一点或有任何想法?
我正在尝试使用 AES 加密 PHP 中的(大)文件并研究使用 Mcrypt 和 OpenSSL,问题是到目前为止我发现的所有解决方案都只加密字符串,而我尝试加密的文件会触发最大值PHP 的内存限制(不幸的是不能设置得更高),我将如何实现这一目标?
我在创建/使用在PHP中创建和使用的RSA密钥时遇到问题.问题是,(公共和私人)密钥应该在不同服务器之间交换(例如,当移动用户帐户时).
现在,PHP的openssl-lib没有提供有关创建密钥的格式的任何详细信息.http://php.net/manual/en/function.openssl-pkey-export.php上的最新文档只是声明它是"PEM格式",但它没有说它是在PKCS#1还是PKCS#8
此外,私有密钥PEM的标头和预告片在PHP版本之间有所不同,如下面的代码所示:
<?php
$config = array(
"digest_alg" => 'sha512',
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA
);
$keyPair = openssl_pkey_new($config);
$privateKey = NULL;
openssl_pkey_export($keyPair, $privateKey);
var_dump($privateKey);
$keyDetails = openssl_pkey_get_details($keyPair);
$publicKey = $keyDetails['key'];
var_dump($publicKey);
die();
?>
Run Code Online (Sandbox Code Playgroud)
将输出不同的东西:
PHP v 5.4:
string(3272) "-----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqA//...
-----END PRIVATE KEY-----
"
string(800) "-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAO//...
-----END PUBLIC KEY-----
"
Run Code Online (Sandbox Code Playgroud)
PHP v 5.5:
string(3272) "-----BEGIN RSA PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqA//...
-----END RSA PRIVATE KEY-----
"
string(800) "-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAO//...
-----END PUBLIC …Run Code Online (Sandbox Code Playgroud) 在phpinfo(); 结果给了我这个
禁用OpenSSL支持(安装ext/openssl)
延长= php_openssl.dll
设置OPENSSL_CONF =/path/to/openssl.cnf
php --ri openssl OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.0.2j 2016年9月26日Openssl default config => C:/jampp/php71/extras/ssl/openssl.cnf
它现在在CMD工作,但phpinfo(); 不在和laravel 5告诉我这个错误
调用未定义的函数openssl_encrypt()
谢谢
当我尝试使用POST向具有此行的脚本发出请求时:
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-CBC', $key);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
致命错误:在第11行的mypath/usuario_webservice.php中调用未定义的函数openssl_decrypt()
经过一些研究后,常见的原因是为函数输入了错误的名称,或者我的Web服务器上没有安装openssl扩展名.事实证明,它是在我检查支持时安装的.那么,我还应该寻找什么呢?
我想在进入数据库之前加密敏感的用户数据,如我的php网站中的个人消息.我在互联网上研究了一下,我发现了一些要记住的重要事项:
永远不要使用mcrypt,它是放弃软件.
AES基于Rijndael算法,至今尚未完整.
AES也被NSA推荐并用于美国政府数据加密,但由于NSA推荐它,他们很可能很容易偷偷摸摸我的用户数据.
Blowfish也没有中断,但速度慢且不太受欢迎.
所以,我决定先用AES-256 cbc试一试.但我仍然不确定我是否不应该认为Blowfish是一个更好的选择.所以欢迎任何建议.
我主要担心的是,如何在php中加密数据?我在php文档中找不到关于这个的好手册.实施它的正确方法是什么?
任何帮助都非常感谢.
我正在 PHP 中加密文本(openssl_encrypt / 'aes-256-cbc'),然后尝试在 Delphi 7 中解密(DCPCrypt / TDCP_rijndael)。
PHP脚本文件以ANSI编码保存,希望传输的字符串(它是REST API Web服务)与Delphi兼容。
然而,Delphi 解密产生了错误的结果,我猜测代码中有问题。如果您能看一下并发现我在 Delphi 方面的错误,我将不胜感激:
PHP代码:
function encrypt($key, $payload) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
return base64_encode($encrypted . '::' . $iv);
}
function decrypt($key, $garble) {
list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}
Run Code Online (Sandbox Code Playgroud)
德尔福代码:
var
DCP_rijndael: TDCP_rijndael;
const
cPASSWORD = 'myownpassword';
function Decrypt(AStr: string): string;
var
d, s, iv: String;
p: Integer;
begin
d := Base64DecodeStr(AStr);
p …Run Code Online (Sandbox Code Playgroud) php-openssl ×10
php ×8
openssl ×4
encryption ×3
aes ×2
apache ×1
composer-php ×1
cryptography ×1
delphi ×1
delphi-7 ×1
file ×1
lamp ×1
laravel ×1
node.js ×1
pki ×1
ssl ×1
windows ×1