标签: php-openssl

用PHP实现secp256k1(ECDSA)(用于比特币)

热衷于downvoters和/或关闭者:如果你认为这是SO的offtopic,请指出我的其他StackExchange站点,这个问题更合适.


如何在PHP中实现ECDSA曲线secp256k1

或者说:是否有任何解决方案 - 即.包括专业课程 - 已经完成了吗?

我可以看到有很多开源库,类和其他语言可用的东西(JavaScript,Python,...)但我整个下午都在谷歌上搜索一些/任何PHP解决方案而且...... 没有!.

这是的比特币项目,我需要一种如何从私钥生成公钥的方法 ...... 然后我想生成最终的比特币地址.

我知道如何生成私钥(不要担心它是随机的或不是 - 这里不是问题)我有256位十六进制和WIF符号.但下一步:提出一个公钥,然后是最终的比特币地址,对我来说是一个问题,因为我确实没有加密的背景,我知道解决方案是以某种方式利用secp256k1.

这是我到目前为止:

// Random bytes
// $private_key = bin2hex(openssl_random_pseudo_bytes(32));
// But using brainwallet.org style to have easy comparison
$passphrase = "correct horse battery staple";
$private_key = hash('sha256', $passphrase);
var_dump ("PrivKey: $private_key");
// Bitcoin::privKeyToWIF from github.com/mikegogulski/bitcoin-php
$wif = Bitcoin::privKeyToWIF($private_key); 
var_dump ("WIF PrivKey: $wif");
// And now I don't know where to even start …
Run Code Online (Sandbox Code Playgroud)

php bitcoin ecdsa php-openssl

6
推荐指数
0
解决办法
3514
查看次数

openssl_encrypt()随机失败 - IV传递的只有$ {x}个字节长,cipher期望一个精确到16字节的IV

这是我用来加密/解密数据的代码:

// Set the method
$method = 'AES-128-CBC';

// Set the encryption key
$encryption_key = 'myencryptionkey';

// Generet a random initialisation vector
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));

// Define the date to be encrypted
$data = "Encrypt me, please!";

var_dump("Before encryption: $data");

// Encrypt the data
$encrypted = openssl_encrypt($data, $method, $encryption_key, 0, $iv);

var_dump("Encrypted: ${encrypted}");

// Append the vector at the end of the encrypted string
$encrypted = $encrypted . ':' . $iv;

// Explode the string using the `:` separator.
$parts …
Run Code Online (Sandbox Code Playgroud)

php encryption aes encryption-symmetric php-openssl

6
推荐指数
1
解决办法
8821
查看次数

为什么 openssl_verify() 无法验证我的 JWT 令牌签名?

编码:

$token = $request->getQueryParams();
$jwt_access_token = $token['access_token'];

$separator = '.';

list($header, $payload, $signature) = explode($separator, $jwt_access_token);

$decoded_signature = base64_decode($signature);

$payload_to_verify = utf8_decode($header . $separator . $payload);

$public_key = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/pubkey.pem');

$verified = openssl_verify($payload_to_verify, $decoded_signature, $public_key, OPENSSL_ALGO_SHA256);
Run Code Online (Sandbox Code Playgroud)

示例访问令牌:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpZCI6IjU0YmEzYmQwZDRkYzAxYmZhNmJjYjdjYTIwOTQwY2YzY2NmM2EyNjQiLCJqdGkiOiI1NGJhM2JkMGQ0ZGMwMWJmYTZiY2I3Y2EyMDk0MGNmM2NjZjNhMjY0IiwiaXNzIjoiIiwiYXVkIjoidGVzdGNsaWVudCIsInN1YiI6InNhbGxlIiwiZXhwIjoxNDgyMTIyODY4LCJpYXQiOjE0ODIxMTkyNjgsInRva2VuX3R5cGUiOiJiZWFyZXIiLCJzY29wZSI6bnVsbH0.q-xwz16YbUiaDzdeiNBoaeZIYNx8G6HXLZRMJjpiezotq0nICTokVxuf3OUur6433MhT6wVCUENUeuJfuvLg3wKZWHfXSoTMG77Gkv1Wart6hlIPFqyZ13gyTzquaKRRDoRD9WSBcKXfTF6V59cWHrwAM5nRIQeOzBdYXZPwnV-9RhXUpjUhJ0LKRJsDZ5EwJUFsIDb7oZ70b3uLJqa79h42Dc5mQWj75uIo8mVCmH9N1BPJRn-Hb9ttgpu2oRgDOqsm4zdBz2CfSkPiHa-j6qKEWHocyLQBZ8XLxyvFSAFVIwqv4OVCBHanzbkfY-ZKkKh1THeyiIcrB9ed6vwzRg
Run Code Online (Sandbox Code Playgroud)

公钥:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3k2ZkpYqCX94B+qC2yc
4atWx+C5d7kFQAgBrbv5gfFuIST0DLt5lvv0OZZI57+ydNXb2G/jyOJPH3ll2mHS
Z+PKAo9aQoL5iYIjz+yYp2Im51LBh4e0Kt1RSjuy4M5RI1JVSsM9rt3NoLMzehv8
57g+uv1T177cJabDvKeqWdD0qR4N7PE/nV0Hrumz5kP4EnYhN0A2wjbXyyyllxhL
nr3Wqii0XJxBF3AwLUlqP1NYhm2wYq0CTjQrgv3/9WCvr4fSzBitzQAP6ZIFRHO3
F8EIaK6r6cDiP2ABmtTrmPAj3ZpqGVBPnvY9yVrqUS0pMxjvvesJiPd2jGrjLQFN
LQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我无法让openssl_verify()函数返回 1。它总是返回 0(它无法验证令牌)。我不明白为什么。任何人都可以指出我正确的方向吗?

php jwt php-openssl

6
推荐指数
1
解决办法
1448
查看次数

56 CONNECT之后从代理接收到HTTP代码403吗?

在使用cUrl从我的网页生成销售线索时,我收到“ CONNECT后从代理服务器收到56的HTTP代码403”错误。该站点的SSL证书已过期。

更新:

我的代码如下:

  curl_setopt($curl, CURLOPT_URL, $_url);
  curl_setopt($curl, CURLOPT_POST, count($field));
  curl_setopt($curl, CURLOPT_POSTFIELDS, $query_data);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_HEADER, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($curl, CURLOPT_USERAGENT, "cusom module");
Run Code Online (Sandbox Code Playgroud)

php curl salesforce ssl-certificate php-openssl

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

PHP openssl_pkcs7_verify不工作

我使用pkcs7签署文档,一切正常,问题是验证标志的命令不起作用,总是返回false.我尝试将terminal命令用于文件并正常工作.

签名命令:

openssl_pkcs7_sign(
    $tempdoc,
    $tempsign,
    $this->signature_data['signcert'],
    array($this->signature_data['privkey'],
    $this->signature_data['password']),
    array(),
    PKCS7_BINARY | PKCS7_DETACHED);
Run Code Online (Sandbox Code Playgroud)

验证命令:

openssl_pkcs7_verify($tempsign, PKCS7_NOVERIFY)
Run Code Online (Sandbox Code Playgroud)

终端命令:

openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
Run Code Online (Sandbox Code Playgroud)


编辑1
我在我的代码中进行测试,并发现我是否仅使用PKCS7_DETACHED或PKCS7_BINARY创建我的符号正常验证,但两者一起我收到错误.为什么会这样?

php php-openssl pkcs#7

6
推荐指数
1
解决办法
546
查看次数

获取 openssl 证书到期日期

我已经通过openssl_x509_parse()函数解析了 openssl 证书,并得到了一个数组作为结果。

现在我需要获取该证书的到期时间。在解析的数组中,我有validTo_time_t包含有效 unix 时间戳的元素。但是如何确定这个时间戳属于哪个时区呢?

所以我无法获得真正的过期时间,因为该时间戳意味着不同时区的不同日期。

php openssl ssl-certificate php-openssl

5
推荐指数
1
解决办法
3430
查看次数

MYSQLi 和 ssl 连接到数据库服务器

我在使用 php 建立 ssl 连接时遇到了一些奇怪的问题。我有网络和数据库服务器。我已经通过openssl生成了证书。它们完全一样。

所以我正在尝试使用 mysql 命令从网络服务器连接:

mysql -h 10.1.1.1 -uroot -p
Password
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 71
Server version: 5.5.5-10.1.19-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input …
Run Code Online (Sandbox Code Playgroud)

php mysql mysqli ssl-certificate php-openssl

5
推荐指数
1
解决办法
3472
查看次数

如何使用以前使用mcrypt加密的OpenSSL解密字符串?

由于mcrypt在PHP 7.1中已弃用,并且我在现有项目中使用mcrypt加密/解密了很多数据,因此如何将我的PHP代码从mcrypt迁移到OpenSSL?我有以下代码要加密:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'salt', 'source string', MCRYPT_MODE_ECB));
Run Code Online (Sandbox Code Playgroud)

解密代码为:

$source = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'salt', base64_decode('encoded string'), MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)

openssl_在不进行编码数据转换的情况下,以上示例中应使用哪些函数来获得相同的结果?

还是唯一的方法是运行一个脚本,该脚本将使用mcrypt解密所有存储的加密数据并使用openssl进行编码?

谢谢

php mcrypt php-openssl

5
推荐指数
1
解决办法
1721
查看次数

openssl_encrypt 返回空字符串

我正在尝试在我的服务器上创建一个 UUID,并且由于某种原因openssl_enrypt正在初始化一个空字符串。如果它返回 false,这将是一个不同的对话,但事实并非如此,它返回一个字符串,只是一个空字符串。

这是我用来构建我想要的加密字符串的所有代码:

$key = hash_hmac("sha512", "You can decrypt this all day long, won't get you closer to the truth", "myKey");
$iv = openssl_random_pseudo_bytes(16);
$adminVal = filter_var($userData['is_admin'], FILTER_VALIDATE_BOOLEAN);
$userName = $userData["name"];
$dataEncrypt = $adminVal.$userName;
$encrypted = openssl_encrypt($dataEncrypt, "AES-256-XTS", $key, 0, $iv);
Run Code Online (Sandbox Code Playgroud)

我有var_dumped $key$iv$dataEncrypt和 它们都返回正确的值。

php hash cryptography sha512 php-openssl

5
推荐指数
1
解决办法
9784
查看次数

php7.2-openssl Alpine Docker 安装错误

我正在使用 Alpine、php7.2-fpm 和 Composer 构建 Docker 镜像。

尝试安装 Composer 时会出现问题,它使用 https 通过 php 下载安装程序。

我添加了存储库以便能够安装 php7.2(用于安装 Composer)及其软件包:

RUN wget -O /etc/apk/keys/phpearth.rsa.pub https://repos.php.earth/alpine/phpearth.rsa.pub && \
    echo "https://repos.php.earth/alpine/v3.7" >> /etc/apk/repositories && \
    apk update
Run Code Online (Sandbox Code Playgroud)

当我尝试下载composer时出现以下错误:

/ # php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
PHP Warning:  copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. copy() Command line …
Run Code Online (Sandbox Code Playgroud)

php composer-php docker php-openssl alpine-linux

5
推荐指数
1
解决办法
1102
查看次数