当前位置: 首页 > 面试题库 >

在Android应用程序中从Java JSch中的字符串或资源加载私钥

明利
2023-03-14
问题内容

我正在编写一个应该使用JSch通过SSH访问我的私有服务器的应用程序。由于我已经设置了公共密钥身份验证,因此我希望该应用程序以相同的方式进行身份验证。我将是唯一使用此html" target="_blank">应用程序的人,因此我想将密钥直接存储在应用程序内(例如,硬编码)或存储在手机主目录中的某个位置。哪一种是最好的存储方式,也许可以将其作为资源文件存储在项目中?由于我刚接触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());

其他方式:

// [...]
// private key in OpenSSH format as a plain string
String private_key = "xyz123abc456def789ghi012..."; 
// public key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; 
// [...]
jsch.addIdentity("id_rsa", private_key.getBytes(), public_key.getBytes(), ssh_pwd.getBytes());

后者导致 “无效私钥” 错误。除此之外,我不确定两者中哪种更安全。

提前致谢。


问题答案:
String private_key = "xyz123abc456def789ghi012..."; // private key in

OpenSSH format as a plain string
String public_key = “a1b2c3d4e5…”; // public key in OpenSSH format as
a plain string



JSch.addIdentity(并且最终KeyPair.load)采用包含的密钥对文件内容通过生成缓冲器ssh-keygen(与 -m pem在最新版本的OpenSSH)。

格式如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvc04a8wViYV5Kb4jX+MxEqN1vi9q9C7mPhf6DV+mb1ADNAiR
YeLqPMLCYUF2ViobcGfarb51gz7iB2TgkDmhQNK9XDCOUaGYN/FeZcN0JpzkjEjZ
ApbRfshj1h9qKQUW+38XKnltMtf4dxiuxkXph8P6IMVveTDs3sSbBPq560bdJ1AD
...
PEyVxlat2I4ShuLQiO1QIuS8ABu5yDM2EouB6vlxtGEBpIJItp7cyA==
-----END RSA PRIVATE KEY-----



ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9zThrzBWJhXkpviNf4zESo3W+L2r0LuY+F/oNX6ZvUAM0CJFh4uo8wsJhQXZWKhtwZ9qtvnWDPuIHZOCQOaFA0r1cMI5RoZg38V5lw3QmnOSMSNkCltF+yGPWH2opBRb7fxcqeW0y1/h3GK7GRemHw/ogxW95MOzexJsE+rnrRt0nUAOu4hHjL6G/nlvdJ1jjZ06NwhYkbAxRoJkHUJTtMT2IL5ZmdAf37KHSPqZS32pLxQDmPutZxpIwlhz4aR78ZGp4+57mR069Y4at09GF0UmgtIiLjlKUexMf5sueVQ8LKhME6vOupMzTbiFEB3UJNq8d9Yx5i+c/IRHUIcI1 marti@MartinuvOmen

这是您private_key和中没有的格式public_key



 类似资料:
  • 问题内容: 如何在Clojure程序中加载程序资源,例如图标,字符串,图形元素,脚本等?我使用的项目布局类似于许多Java项目中的布局,在Java项目中,“资源”目录挂在“源”目录上。一个jar文件是从源代码创建的,包括资源,但是我似乎无法像在Java中那样加载资源。 我尝试的第一件事是 但是永远找不到资源。 您可以使用类似的方法 其中name是要加载的资源的名称,而流是。 您可以尝试将上下文类加

  • 问题内容: 我的代码是: 但是我在Eclipse中收到“无法从Context类型对非静态方法getString(int)进行静态引用”。我正在尝试本地化我的应用程序(将所有的硬编码字符串放入资源中),因此我在哪里: 我以前有一个硬编码的字符串,很好。 我不确定这里发生了什么(Java noob)。谁能启发我? 非常感谢 巴兹 问题答案: 只需使用此代替: makeText(Context cont

  • 问题内容: 我有作为Java类的资源束,可从数据库中读取值。当我更新数据库时,我需要重新加载捆绑软件,但我不知道如何。有人帮忙吗? 鉴于我使用捆绑如下: 问题答案: 要么 调用此方法将重新加载资源,它将刷新包 参考

  • 问题内容: 我需要将资源ID传递给我的一个类中的方法。它既需要使用引用指向的id,也需要使用字符串。我应该如何最好地做到这一点? 例如: 我需要获取它的整数ID,但是我还需要访问字符串“ icon”。 如果我只需要传递给该方法的是“ icon”字符串,那将是更好的选择。 问题答案: 我不知道那个存在。 在我的项目中,我使用以下代码来做到这一点: 这样将用于获取资源整数值的值 我刚刚找到了一篇博客文

  • 问题内容: 如何加载Spring资源内容并将其用于设置bean属性或将其作为参数构造函数传递? 该资源包含自由文本。 问题答案: 此解决方案需要Apache Commons IO。 @Parvez建议的另一种没有Apache Commons IO依赖性的解决方案是