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

2023-11-25

我正在编写一个应用程序,该应用程序应该使用 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());

其他方式:

// [...]
// 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

The JSch.addIdentity(最终KeyPair.load)采用一个缓冲区,其中包含由以下命令生成的密钥对文件的内容ssh-keygen (with -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 and public_key.


也可以看看JSch 从字符串添加私钥.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 使用片段时应用程序崩溃

    我正在处理碎片和 我的代码中有一个我找不到的问题 logcat 指向我的一个片段中的这段代码 Override public View onCreateView LayoutInflater inflater ViewGroup conta
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 在 Android 应用程序资源中使用 JSON 文件

    假设我的应用程序的原始资源文件夹中有一个包含 JSON 内容的文件 我如何将其读入应用程序 以便我可以解析 JSON See 开放原始资源 http developer android com reference android conte
  • Android:如何从网络异步获取搜索建议?

    我创建了一个可搜索的活动 现在 我想添加从网络服务获取的搜索建议 我想异步获取这些建议 根据添加自定义建议 http developer android com guide topics search adding custom sugge
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐

  • 用逗号分割字符串列表

    我想转换 60 78 70 77 80 74 90 75 100 74 110 75 in to 60 78 70 77 etc 我以为我可以用 for word in lines word word split newlist appen
  • Yahoo 和 MS 支持 Oauth 2.0 吗?以及有关 oAuth 2.0 的几个问题

    我有几个问题 yahoo 和 microsoft api 支持吗 oAuth 2 0 如果是的话主要是什么 应采取的安全措施 转移时得到照顾 oAuth 1 0 到 oAuth 2 0 Google API 支持 oAuth 2 0 但 他
  • 从文本文件中解析数据

    我有一个文本文件 其内容如下 ENTRY 01 ID 01 Data1 0 1834869385E 002 Data2 10 9598489301 Data3 0 1091356549E 001 Data4 715 然后是一个空行 并重复更
  • 使用折叠表达式打印所有带有换行符的可变参数

    C 17 折叠表达式的经典示例是打印所有参数 template
  • 确定Java平台的默认字符集

    我正在用 Java 编程 我的代码如下 byte b test getBytes 在 api 中指定 如果我们不指定字符编码 则采用默认的平台字符编码 默认平台字符编码 是什么意思 它是指 Java 编码还是操作系统编码 如果这意味着操作系
  • wxpython 3.0 破坏了旧应用程序? (区域设置错误)

    我有一个可以与旧版本的 wxpython 正常运行的应用程序 现在使用 wxpython 3 0 当尝试运行该应用程序时 出现以下错误 File C Python27 lib site packages wx 3 0 msw wx cont
  • 将背景图像设置为动态 svg 数据?

    最初我有一些内联 svg 它可以按我想要的方式工作
  • PHP SOAP 过程“functionName”不存在

    我正在 Symfony 中编写 SOAP 应用程序 对于我的所有请求 我收到错误Procedure getClusterName not present 奇怪的是 当我用纯 PHP 创建测试 SOAP 应用程序时 它工作正常 但 Symfo
  • 测试 APK 扩展库时出现问题

    我已经将来自 Google 的 APK 扩展文件下载库集成到我的项目中 它的工作或多或少都正常 除了一些小问题 其他人已经在 SO 上报告过这些问题 然而 我很难测试它 当我第一次测试它时 我将签名的 APK 主扩展文件版本 1 上传到 G
  • 如何通过 app.config 变量覆盖 settings.settings 变量

    如何通过在生产时将变量添加到 app config 来更改 或覆盖 settings settings 变量 无论如何 这可能吗 您必须直接引用您尝试覆盖的 applicationSettings 并显式指定具有替换值的属性
  • 如何修复架构 x86_64 的 g++ 未定义符号错误?

    首先 我已经阅读了Stackoverflow上关于这个问题的相关内容 但仍然无法解决 我已经尽可能地简化了我的代码 我只有一个带有 h 和 cpp 文件的自定义类 但在尝试从 main cpp 创建此类的实例时出现错误 main cpp i
  • .NET 内核之间线程的移动

    跟进问题来自多核使用 线程 线程池 线程在其生命周期内是否从一个核心移至另一个核心 当然 想象一下你有三个 在双核系统上运行的线程 给我一个公平的时间表 但不 涉及定期移动线程 核心之间 这是我第一次访问这个网站 所以我想我没有足够的代表来
  • MongoDB c# 驱动程序 - 名为 Id 的字段可以不是 Id 吗?

    更具体地说 有一个类 class X string Id get set class Y X ObjectId MyId get set 我希望 MyId 成为 Y 的 id 即映射到 id 是否可以 在这段代码之后我得到一个异常 var
  • SQLAlchemy - 如何映射只读(或计算)属性

    我试图弄清楚如何映射一个简单的只读属性 并在保存到数据库时触发该属性 一个人为的例子应该可以让这一点更加清楚 首先 一个简单的表格 meta MetaData foo table Table foo meta Column id Strin
  • 用因子替换一定范围内的数字[重复]

    这个问题在这里已经有答案了 给定一个由一系列整数 年龄 组成的数据帧列 我想将整数范围转换为序数变量 我当前的代码不起作用 我该怎么做 df lt read table http dl dropbox com u 822467 df csv
  • unity Shader 使用 Shader.Find 时返回 NULL

    就像声明的那样here我不是唯一发现以下问题的人 Shader Find 返回 Null 在上面的链接中 他们通过在资源文件夹中创建某些内容 给出了解决方案 但我不确定我是否理解 首先 这对于所有情况都是必要的吗 意味着 Shader Fi
  • 更改 Windows 窗体中的内容

    我正在使用 Windows 窗体在 C 中制作一个应用程序 我想完全交换 Windows 窗体中的所有内容并将其替换为其他内容 有什么方便的方法可以做到这一点吗 示例 我有一个菜单 当我单击 开始 时 我希望菜单消失并开始游戏 我没有使用
  • Windows Phone 7.1 和 Windows Phone 8 上的 Sqlite

    我正在开发一个适用于 Windows Phone 7 1 7 5 8 必须适用于两者 的应用程序 其中需要数据库连接 该应用程序已经针对 Iphone 和 Android 实现 因此我必须使用那里的数据库文件 以使所有应用程序的数据库结构都
  • 我是否使用正确的方法来监视创建句柄时要执行的任务?

    是否有普遍接受的最佳实践来创建自行取消订阅的事件处理程序 例如 我想到的第一件事是 Foo cs Bar bar new Bar add l req d state EventHandler handler new EventHandler
  • 在 Android 应用程序中从 Java JSch 中的字符串或资源加载私钥

    我正在编写一个应用程序 该应用程序应该使用 JSch 通过 SSH 访问我的私人服务器 由于我已经设置了公钥身份验证 因此我希望此应用程序以相同的方式进行身份验证 我将是唯一使用此应用程序的人 因此我想将我的密钥直接存储在应用程序内 例如硬