标签: phpseclib

set_include_path(get_include_path().PATH_SEPARATOR.'phpseclib');

我偶然发现了以前从未在php中使用过的两个函数

set_include_path();
get_include_path();
Run Code Online (Sandbox Code Playgroud)

我目前正在寻找将phpseclib实现到我正在处理的项目上.因为我需要使用SSH2的SFTP类扩展,而后者又需要MathBigInteger类等.等等.

手册说set_include_path():

"在脚本的持续时间内设置include_path配置选项."

这对我的框架的其余部分意味着什么,它会设置来自'phpseclib'目录的所有包含路径吗?

另外,我真的没有得到:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
Run Code Online (Sandbox Code Playgroud)

我将php sec存储在我的文件系统中的自定义库目录中,get_include_path()有些神奇地找到我的文件系统中的phpseclib目录吗?

正如你所看到的,我完全迷失在这里......有人可以帮我一点点好吗?

PS/I只需要在应用程序的一个partivular点上使用这个库,因此只想在需要时包含它,目前我想将它包含在我的模型类的子代中.

php ftp sftp phpseclib

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

如何安装phpseclib?

我在我的机器上安装了Apache,因此我可以将localhost用作PHP服务器.这样可行.现在我正在尝试使用PHP通过SFTP将文件发送到另一台服务器.我环顾四周,看到了phpseclib的推荐.我似乎无法弄清楚如何安装phpseclib.以下是该网站提供的内容:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SFTP.php');
Run Code Online (Sandbox Code Playgroud)

您必须设置包含路径.

我明白这些词是什么意思,但我无法让它发挥作用.我正在使用mac.我的服务器在/Users/diego/Sites/.我到底需要把phpseclib文件夹放在哪里?我需要在我的php文件中添加哪些行以phpseclib包含在内?

php install phpseclib

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

如何使用phpseclib验证证书是否由公共CA签名?

我需要确保SMTP服务器证书由公共证书颁发机构签名.我想使用phpseclib或其他一些受信任的库.我相信我可以使用从Firefox中提取的根证书.

这里有一些家庭酿造方法来检查证书日期和其他元数据,但它看起来不像任何签名检查那样(除了确保OpenSSL这样做).无论如何,我想使用一个库 - 我想写尽可能少的证书处理代码,因为我不是一个密码学家.

也就是说,上面链接的答案仍然非常有用,因为它帮助我获取了一些代码来从TLS对话中获取证书:

$url = "tcp://{$domain}:{$port}";
$connection_context_option = [
    'ssl' => [
        'capture_peer_cert' => true,
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true,
    ]
];
$connection_context = stream_context_create($connection_context_option);
$connection_client = stream_socket_client($url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $connection_context);
stream_set_timeout($connection_client, 2);
fread($connection_client, 10240);
fwrite($connection_client,"HELO alice\r\n");
fread($connection_client, 10240);
fwrite($connection_client, "STARTTLS\r\n");
fread($connection_client, 10240);
$ok = stream_socket_enable_crypto($connection_client, TRUE, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
if ($ok === false)
{
    return false;
}
$connection_info = stream_context_get_params($connection_client);

openssl_x509_export($info["options"]["ssl"]["peer_certificate"], $pem_encoded);
Run Code Online (Sandbox Code Playgroud)

(请注意,我已经故意关闭了证书验证.这是因为我无法控制运行的主机,它们的证书可能已经过旧或配置错误.因此,无论连接验证如何,我都希望获取证书我正在使用,然后使用cacert.pem我将提供的内容自行验证.)

那将给我这样的证书.这个是Microsoft的Live.com电子邮件服务器smtp.live.com:587:

-----BEGIN …
Run Code Online (Sandbox Code Playgroud)

php ssl ssl-certificate phpseclib

12
推荐指数
1
解决办法
1392
查看次数

从rsa私钥中删除密码

这是我用phpseclib做的方法(有效):

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->setPassword('password');
$result = $rsa->loadKey('-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633

gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb
VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q
/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q
O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2
E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo
xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a
9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS
MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk
qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk
MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI
Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA==
-----END RSA PRIVATE KEY-----');

echo $result ? 'true' : 'false';
?>
Run Code Online (Sandbox Code Playgroud)

但是,为了进行比较,我正在尝试使用OpenSSL.这是我的代码:

<?php
$pkey = openssl_pkey_get_private('-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633

gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb
VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q
/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q
O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2
E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo
xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a
9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS
MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk
qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk
MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI
Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA==
-----END RSA PRIVATE KEY-----', 'password');
if ($pkey === false) exit('FAILURE');
openssl_pkey_export($pkey, $out_key_file);
echo $out_key_file;
?>
Run Code Online (Sandbox Code Playgroud)

唯一的问题:代码过早死亡,回应失败.即.openssl_pkey_get_private()未加载密钥.openssl_error_string表示"错误:0906D066:PEM例程:PEM_read_bio:错误的结束行".

有任何想法吗?

php openssl phpseclib

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

加密PHP,解密Java

我在php中有一个web服务,它生成一个用于加密消息的密钥对,以及一个用于检索私钥并解密消息的java应用程序.

对于php我正在使用http://phpseclib.sourceforge.net/并拥有这两个文件:

keypair.php

<?php

set_time_limit(0);
if( file_exists('private.key') )
{
    echo file_get_contents('private.key');
}
else
{
    include('Crypt/RSA.php');
    $rsa = new Crypt_RSA();
    $rsa->createKey();
    $res = $rsa->createKey();

    $privateKey = $res['privatekey'];
    $publicKey  = $res['publickey'];

    file_put_contents('public.key', $publicKey);
    file_put_contents('private.key', $privateKey);
}

?>
Run Code Online (Sandbox Code Playgroud)

encrypt.php

<?php

include('Crypt/RSA.php');

//header("Content-type: text/plain");

set_time_limit(0);
$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_OAEP);
$rsa->loadKey(file_get_contents('public.key')); // public key

$plaintext = 'Hello World!';
$ciphertext = $rsa->encrypt($plaintext);

echo base64_encode($ciphertext);

?>
Run Code Online (Sandbox Code Playgroud)

在java中我有这个代码:

package com.example.app;

import java.io.DataInputStream;
import java.net.URL;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

public class MainClass …
Run Code Online (Sandbox Code Playgroud)

php rsa bouncycastle public-key-encryption phpseclib

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

作曲家安装梨包

我知道你可以从任何梨形通道安装包,我有一个基本的梨包

...
"repositories": [
    {
        "type": "pear",
        "url": "http://pear.php.net"
    }
],
"require-dev": {
    "pear-pear/Mail": "*"
}
...
Run Code Online (Sandbox Code Playgroud)

我要做的是从不同的通道安装依赖项进行测试.

sudo pear channel-discover phpseclib.sourceforge.net
sudo pear install phpseclib/Net_SSH2
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几乎我在composer.json中可以想到的每个配置组合来安装这个包,但它似乎从来没有找到任何东西或工作.

在我的composer.json中,要安装此软件包的正确方法/配置是什么?

php pear package-managers composer-php phpseclib

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

如何使用PHPseclib捕获未处理的错误?

假设我有以下代码.

为了测试这一点,我更改了服务器IP以模仿错误消息.以下IP不存在,因此Unhandled Exception消息为:Cannot connect to 10.199.1.7. Error 113. No route to host

这会显示一个带有PHP代码的丑陋屏幕.是否有可能发现此错误?

try {
      $ssh = new Net_SSH2('10.199.1.7');        
  if (!$ssh->login('deploy', $key)) {
       throw new Exception("Failed login");
  }
} catch (Exception $e) {
     ???
}
Run Code Online (Sandbox Code Playgroud)

php phpseclib

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

在PHP中通过SFTP传输大文件

我有一个大文件(200 MB以上).我需要通过PHP cron job转移它.使用Phpseclib会出现以下错误:

/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php中允许的内存大小为134217728个字节(尝试分配4133个字节)

有没有办法可以做到这一点PHP cron job

代码很简单,其中$ localFile是一个已经存在的CSV文件

$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud)

PS.这需要PHP/tmp文件夹中生成该文件后完成,因此传输脚本的时间必须发挥作用.

[编辑]我不打算增加内存限制,因为以后的文件可能会更大.我可以部分传输文件(附加模式)或使用PHP cron的一些shell脚本的解决方案是值得的

远程服务器上的文件大小为111.4 MB,而本地实际文件大得多.

[修复后编辑]从版本1.0更改为版本2.0.2后问题消失我必须修改put的代码

$sftp->put('/Import/coupons/coupons_import.csv', $localFile, $sftp::SOURCE_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud)

php cron sftp net-sftp phpseclib

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

使用phpseclib和net_ssh如何使用$ ssh-&gt; exec su到根目录

所以我需要执行一个命令,但是它只会在su到root(或sudo)时运行,但我似乎无法弄清楚如何将su命令发送到root

(我可以使用loginuser罚款登录并执行其他命令)

http://phpseclib.sourceforge.net/ssh/examples.html

我的代码如下

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('255.255.255.255',22);
if (!$ssh->login('loginuser', 'fakepassword')) {
    exit('Login Failed');
}

echo $ssh->read('[prompt]');
echo $ssh->write("su\n");
echo $ssh->read('Password:');
echo $ssh->write("rootfakepassword");
echo $ssh->read('[prompt]');
echo $ssh->exec('cc get_wireless_status');
?>
Run Code Online (Sandbox Code Playgroud)

我也尝试使用exec命令来做大致相同的事情而没有运气

有什么建议么?

当前版本的代码(无效)

<?php
    include('Net/SSH2.php');

    $ssh = new Net_SSH2('255.255.99.74',22);
    if (!$ssh->login('loginuser', 'password')) {
        exit('Login Failed');
    }

    echo $ssh->read('loginuser@intranet:/home/login >');
    $ssh->write("su\n");
    echo $ssh->read('Password:');
    $ssh->write("rootpassword\n");
    echo $ssh->read('intranet:/home/login #');
    $ssh->write("cc get_wireless_status\n");
    echo $ssh->read('[prompt]');
?>
Run Code Online (Sandbox Code Playgroud)

登录腻子文本

login as: loginuser
loginuser@255.255.99.74's password:
Last login: Thu Feb 14 13:57:16 2013 from infong1045.lxa.perfora.net


Sophos UTM
(C) …
Run Code Online (Sandbox Code Playgroud)

php ssh command-line-interface phpseclib

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

通过PHP(phpseclib)将文件上传到SFTP服务器

我有要上传到SFTP服务器中“传入”文件夹的CSV。我正在使用phpseclib来做到这一点。该连接已经存在,但不输出任何内容。

我不确定自己做的是否正确,因为我之前从未处理过SFTP。这是我的代码:

$file = "leads.csv";

$server = "41.160.150.200";
//$server = "ft.bayport.co.za";
$port = "22";
$username = "";
$password = ""; 

//username and password removed for security reasons

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

include 'Net/SFTP.php';

define('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX); // or NET_SFTP_LOG_SIMPLE

$sftp = new Net_SFTP($server);

// Check SFTP Connection
if (!$sftp->login($username, $password)) {
    echo 'Login Failed.';
    echo $sftp->getSFTPLog();
}else{

echo 'Connected to SFTP.';

echo $sftp->pwd();

// Upload CSVs to SFTP incoming folder
     echo $upload = $sftp->put("incoming/".$file, "./bayport/".$file, NET_SFTP_LOCAL_FILE);

}
Run Code Online (Sandbox Code Playgroud)

我真的很感谢您的帮助。谢谢!

php csv ssh sftp phpseclib

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