Мне нужно повторить ту же самую криптографию CryptoJS на моем приложении для Android Kotlin, я уже установил один и тот же алгоритм и преобразование для обоих.
Расширение кода Kotlin для шифрования / дешифрования: (я не тестировал дешифрование)
private val ALGORITHM = "AES"
private val TRANSFORMATION = "AES/CBC/PKCS7Padding"
fun ByteArray.toEncryptedHash(key: String): String {
var outputBytes = ByteArray(0)
try {
val secretKey = SecretKeySpec(key.toByteArray(), ALGORITHM)
val cipher = Cipher.getInstance(TRANSFORMATION)
val ivParameterSpec = IvParameterSpec("1234567891234567".toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec)
outputBytes = cipher.doFinal(this)
} catch (ex: IOException) {
//throw CryptoException("Error encrypting/decrypting file", ex)
}
return Base64.encodeToString(outputBytes, 0)
}
fun String.toDecryptedByteArray(key: String): ByteArray {
var outputBytes = ByteArray(0)
try {
val secretKey = SecretKeySpec(key.toByteArray(), ALGORITHM)
val cipher = Cipher.getInstance(TRANSFORMATION)
cipher.init(Cipher.DECRYPT_MODE, secretKey)
val inputByte = Base64.decode(this.toByteArray(), 0)
outputBytes = cipher.doFinal(inputByte)
} catch (ex: IOException) {
//throw CryptoException("Error encrypting/decrypting file", ex)
}
return outputBytes
}
MainActivity:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("ENCRYPT TEST", "DSDASSADAS DAS ADSD".toByteArray().toEncryptedHash("ZGFzZGFzZGZhZ2Y="))
}
}
Код CryptoJS (на почтальоне:)
const payload = "DSDASSADAS DAS ADSD";
const encrypted = CryptoJS.AES.encrypt(
CryptoJS.enc.Utf8.parse(payload),
"ZGFzZGFzZGZhZ2Y=",
{
keySize: 128,
iv: CryptoJS.enc.Utf8.parse('1234567891234567'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log(encrypted.toString())
pm.globals.set("userEncrypted", encrypted.toString());
Результат из приложения Kotlin для Android: bsOVFANvitVwybiPCcjLe189KuQV5Jb70iLoLQOult8Q = 1010из CryptoJS (консоль почтальона): U2FsdGVkX19tqC2bt + P4KddWhhxQrHyIsRpggPDQX79gI24fg64Cl14rDtuosN44
Это не тот же хеш, я думаю, что CryptoJS делает много вещей, а не только cto.Как получить такой же хеш на Kotlin?(У меня нет разрешения на изменение приложения js, мне нужно выполнить репликацию на Kotlin).
Ответ может быть на Java, нет проблем.