Как использовать ACH на Android с хранилищем ключейAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать ACH на Android с хранилищем ключей

Сообщение Anonymous »

Я хочу создать простой SSH-клиент на Android, но столкнулся с проблемой: я не могу использовать ACH с хранилищем ключей, на данный момент я создал в своем проекте KeysManager два класса, которые генерируют пару ключей, и может получить открытый ключ.

Код: Выделить всё

package ssh.code.editor

import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPair
import java.security.KeyPairGenerator
import java.security.KeyStore

class KeysManager {
var error = ""

fun generateKeyPair(name:String, size:Int): KeyPair? {
try{
val parameter = KeyGenParameterSpec.Builder(name, KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY).apply {
setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
setKeySize(size)
}.build()
return KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore").apply { initialize(parameter) }.generateKeyPair()
}catch (e:Exception){
error=""
error+=e.message
return null
}
}

fun getPublicKey(name:String):String{
val keyStore: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply {
load(null)
}
val entry = keyStore.getEntry(name, null)
if(entry !is KeyStore.PrivateKeyEntry){
error="Key is not present"
return ""
}
return String(entry.certificate.publicKey.encoded)
}
}
и SSH, которые выполняют необходимые основные операции

Код: Выделить всё

package ssh.code.editor

import com.jcraft.jsch.ChannelExec
import com.jcraft.jsch.ChannelSftp
import com.jcraft.jsch.ChannelSftp.LsEntry
import com.jcraft.jsch.JSch
import com.jcraft.jsch.JSchException
import com.jcraft.jsch.Session
import java.io.ByteArrayOutputStream
import java.io.InputStream
import java.util.Vector

class SSH(host: String, user: String, private var key: String, port: Int = 22) {
//ERROR variable
var error:String=""

//JSCH variables
private var jsch = JSch()
private var session:Session?=try {
jsch.getSession(host, user, port)
}
catch(e:JSchException){
error+=e.message
null
}?.
apply {
setPassword(key)
connect()
}

private var execChannel : ChannelExec = session?.openChannel("exec") as ChannelExec
private var sftpChannel : ChannelSftp = session?.openChannel("sftp") as ChannelSftp

private fun inputStreamToString(inputStream: InputStream):String{
val byteOut = ByteArrayOutputStream()
val buffer = ByteArray(1024)
while (inputStream.read(buffer)!=-1){
byteOut.write(buffer, 0, 1024)
}
return byteOut.toString("UTF-8")
}

fun runCommand(command: String):String{
if(execChannel.isClosed) return ""
execChannel.setCommand(command)
execChannel.connect()
val s =  inputStreamToString(execChannel.inputStream)
execChannel.disconnect()
return s
}

@Suppress("UNCHECKED_CAST")
fun itemInDirectory(path: String):Array{
var result= emptyArray()
for (entry:LsEntry in sftpChannel.ls(path) as Vector){
result+=entry.filename
}
return result
}

fun getFile(serverPath:String) = inputStreamToString(sftpChannel.get(serverPath))

fun loadFile(serverPath:String, data:String) = sftpChannel.put(data.byteInputStream(), serverPath)
}
Я прочитал на сайте разработчика Android, что закрытый ключ невозможно получить, и сообщение необходимо отправить через API для расшифровки.
Так есть ли это? способ использования ACH с хранилищем ключей или есть другой SSH API, который я могу использовать вместо ACH
Я пытался найти ответ в Интернете, но ничего не нашел
Поэтому я прошу помощи, пожалуйста

Подробнее здесь: https://stackoverflow.com/questions/792 ... h-keystore
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать ACH на Android с хранилищем ключей
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Каковы различия между внутренним хранилищем, внешним хранилищем, SD -картой и съемным хранилищем?
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Подробная отладка ACH-SSH2
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Вход в ACH SFTP с использованием двухфакторной аутентификации
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как обработать пароль с утраченным хранилищем ключей в Android?
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»