Результат не равняется шифрованию CryptoJS и Kotlin / Java - PullRequest
0 голосов
/ 24 февраля 2019

Мне нужно повторить ту же самую криптографию 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, нет проблем.

...