В чем моя проблема с расшифровкой этого файла? (Котлин/Android-студия)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 В чем моя проблема с расшифровкой этого файла? (Котлин/Android-студия)

Сообщение Anonymous »

Я пишу приложение, которое позволит вам подключаться к удаленному компьютеру через ssh.
Я хочу, чтобы ключ ssh был защищен, поэтому моя идея состоит в том, чтобы зашифровать его, а затем расшифровать внутри приложения.< /p>
Вот функцию, которую я использую:

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

    fun decryptFileWithPBKDF2(
encryptedFile: File,
decryptedFile: File,
password: String,
iterations: Int = 10000,
keyLength: Int = 256
) {
val saltSize = 8 // OpenSSL salt is 8 bytes
val ivSize = 16 // AES block size is 16 bytes for CBC mode
val headerSize = 8 // Salted__ is the first 8 bytes

FileInputStream(encryptedFile).use { fis ->
val fileBytes = fis.readBytes()

// Check if the file is at least large enough to contain the header, salt, and IV
if (fileBytes.size < headerSize + saltSize + ivSize) {
throw IllegalArgumentException("Invalid encrypted file format.")
}

// Extract the salt (bytes 8 to 15) and IV (bytes 16 to 31)
val salt = fileBytes.sliceArray(headerSize until headerSize + saltSize)
val iv = fileBytes.sliceArray(headerSize + saltSize until headerSize + saltSize + ivSize)

// Ciphertext starts after "Salted__", salt, and IV (total 32 bytes)
val cipherText = fileBytes.sliceArray(headerSize + saltSize + ivSize until fileBytes.size)

// Derive the key using PBKDF2 with the same parameters as OpenSSL
val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")
val spec: KeySpec = PBEKeySpec(password.toCharArray(), salt, iterations, keyLength)
val tmp = factory.generateSecret(spec)
val secretKey = SecretKeySpec(tmp.encoded, "AES")

// Initialize AES cipher for decryption (AES/CBC/PKCS5Padding)
val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, secretKey, IvParameterSpec(iv))

// Decrypt the file
val decryptedBytes = cipher.doFinal(cipherText)

// Write the decrypted content to the output file
FileOutputStream(decryptedFile).use { fos ->
fos.write(decryptedBytes)
}
}
}
Вот полный текст в моем test.txt:
"Это серьезное сообщение! Я не уверен, почему расшифровка портит этот замечательный текст :("
И почему-то после расшифровки это выглядит так:
"серьезное сообщение! Не знаю, почему расшифровка портит этот замечательный текст :("
Я зашифровал такой файл:

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

openssl enc -aes-256-cbc -pbkdf2 -salt -in test.txt -out test.enc -k "password" -p
Можете ли вы помочь мне решить эту проблему?
Я безуспешно пытался использовать все три основных помощника ИИ.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как выбрать изображение из слайд-шоу в качестве обоев | Android-студия | Котлин
    Гость » » в форуме Android
    0 Ответы
    71 Просмотры
    Последнее сообщение Гость
  • Котлин не настроен: студия Android
    Anonymous » » в форуме Android
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous
  • Почему эта переменная не обнаруживается? Android-студия Котлин
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Котлин, Android-студия. «Неоднозначность разрешения перегрузки. Все эти функции совпадают» в Text(...)
    Anonymous » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Котлин не настроен: студия Android
    Anonymous » » в форуме Android
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous

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