Я хочу, чтобы ключ 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)
}
}
}
"Это серьезное сообщение! Я не уверен, почему расшифровка портит этот замечательный текст

И почему-то после расшифровки это выглядит так:
"серьезное сообщение! Не знаю, почему расшифровка портит этот замечательный текст

Я зашифровал такой файл:
Код: Выделить всё
openssl enc -aes-256-cbc -pbkdf2 -salt -in test.txt -out test.enc -k "password" -p
Я безуспешно пытался использовать все три основных помощника ИИ.
Подробнее здесь: https://stackoverflow.com/questions/790 ... roidstudio