我想将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) 在询问之前,我不得不说我已经在堆栈和其他地方尝试了每个类似的问题并且失败了.
我composer因为这个错误而无法使用:
requires ext-openssl * -> the requested PHP extension openssl is missing from your system.
Run Code Online (Sandbox Code Playgroud)
我xampp上ubuntu.
我尝试过的:
;extension=php_openssl.dll在php.ini(CLI和正常) -没有工作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
PATH中bashrc,没有任何成功我发现奇怪的是扩展的位置...... …
我用密码工作的一个项目,我需要就如何一起工作一点帮助openssl_encrypt和openssl_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)吗?
我正在尝试测试我在此处找到的这个示例,以便我可以在客户端进行直接上传,而无需用户使用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) 我尝试通过连接fsockopen到sendm.cert.legalmail.it的465端口,是在意大利被称为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 …
我正在尝试使用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) 我有一个SOAP服务器.在服务器上接收的SOAP请求具有ws安全头.以下是请求XML的主要节点.
SecurityTokenReference
数据(SOAP主体中客户端发送的数据)
我必须使用客户端(请求的发送者)提供的证书(.cer文件)来验证请求.
验证请求的步骤是什么?请解释一下这个概念.没有可用于执行此操作的库.经过长期的研究,我能比赛后BinarySecurityToken与base64_encode($certFile)$ certFile是请求者的certifiate.现在我正在研究如何匹配DigestValue什么.
我正在使用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
可能有什么问题?
你们可能知道,扩展名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)
但我有两个问题:
任何人都有类似的问题(或知道如何解决它?)
顺便说一句:我正在使用PHP的开发大师版本(假设是7.1.0 alpha 3).
我正在尝试进行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-openssl ×10
php ×9
encryption ×4
.net ×1
aes ×1
apache ×1
bouncycastle ×1
c# ×1
composer-php ×1
cryptography ×1
dnssec ×1
java ×1
lampp ×1
laravel ×1
mcrypt ×1
openssl ×1
sjcl ×1
ssl ×1