我正在编写一个应用程序,它应该使用 JSch 通过 SSH 访问我的私人服务器。因为我已经设置了公钥身份验证,所以我希望这个应用程序以相同的方式进行身份验证。我将是唯一一个使用此应用程序的人,因此我想将我的密钥直接存储在应用程序中(例如,硬编码)或在手机主目录中的某个位置分开存储。哪种是最好的存储方式,也许是作为项目中的资源文件?由于我对 Android 开发还很陌生,因此我不确定最好的方法是什么。
我试过的:
// [...]
String user = "my_user";
String ssh_pwd = "my_pwd";
String host = "my_host";
// stored as OpenSSH key - file not found error - where shoud I move this file?
String private_key = "./my_pk";
int port = 22;
// basic SSH connection stuff
JSch jsch = new JSch();
session = jsch.getSession(user, host, port);
jsch.addIdentity(private_key, ssh_pwd.getBytes());
Run Code Online (Sandbox Code Playgroud)
其它的办法:
// [...]
// private key in OpenSSH format as a plain string
String private_key = …Run Code Online (Sandbox Code Playgroud) 在用普通的 C++ 编写了很多代码之后,我最近又回到了 Qt/C++ 编程。
在浏览 StackOverflow 时,我经常会看到诸如“为什么使用指针?”之类的帖子。在大多数情况下,答案的要点是“如果可以避免,请不要使用它们”。
在 C++ 中编码时,我现在主要尝试使用由 ( const) 引用传递的堆栈变量,或者,如有必要,std::shared_ptr分别使用。std::unique_ptr 需要的地方。
回到 Qt,我发现所有这些“原则”显然都被完全忽略了。
我知道 Qt 使用自己的内存管理来处理原始指针,但这是我的问题:
为什么他们至少不使用shared_ptror unique_ptr,特别是因为他们甚至有自己的实现QSharedPointer?
我目前正在研究更多 C++11 的东西,并在constexpr. 在我的一本书中,据说您应该将它用于常量,例如 ? 例如以这种方式:
#include <cmath>
// (...)
constexpr double PI = atan(1) * 4;
Run Code Online (Sandbox Code Playgroud)
现在我想把它放在一个自己的命名空间中,例如。MathC:
// config.h
#include <cmath>
namespace MathC {
constexpr double PI = atan(1) * 4;
// further declarations here
}
Run Code Online (Sandbox Code Playgroud)
...但这里 IntelliSense 说function call must have a constant value in a constant expression。
当我声明PI以下方式时,它有效:
static const double PI = atan(1) * 4;
Run Code Online (Sandbox Code Playgroud)
编译器似乎不喜欢constexpr但static const在这里的实际原因是什么?不constexpr应该在这里也有资格,或者这完全与这里的上下文有关并且constexpr不应该在函数之外声明?
谢谢你。