【问题标题】:Kotlin failing to decode Base64 string encoded with MySQL's TO_BASE64 functionKotlin 无法解码使用 MySQL 的 TO_BASE64 函数编码的 Base64 字符串
【发布时间】:2020-12-11 00:55:20
【问题描述】:

我的任务是通过可能不安全的通道(电子邮件的正文 - 这是一项硬性要求)从一台服务器上的数据库向不同环境中的另一台服务器发送字符串。为了安全地执行此操作,我设计了一种方法,通过该方法压缩字符串,使用 AES 加密,转换为 base64 以防止电子邮件系统破坏它,然后在另一端反转此过程。为了生成加密和编码的字符串,使用了这些 MySQL 函数(我现在不关心压缩步骤):

set @foo = aes_encrypt('foobarbazfoobarbazfoobarbazfoobarbaz', 'AN_AES_KEY');
set @bar = to_base64(convert(@foo using ascii)); /* this is what's sent via email */

接收器程序是用 Kotlin 编写的,必须反转每个步骤,然后将结果写入数据库。不幸的是,我似乎在第一个障碍上跌倒了。我已经尝试了许多 base64 解码选项,但令人沮丧的是,它们都没有重现我然后用我的密钥解密的 AES 密文。我在更改解码功能时注意到以下行为:

  • 每个函数都会产生与 AES 密文不匹配的无意义输出。

  • 每个函数产生正确的字节数(IE与密文相同)

任何见解将不胜感激!

【问题讨论】:

    标签: mysql email kotlin base64 aes


    【解决方案1】:

    我正在使用静态变量。 MySql端的加密&base64编码是:

    ibGlUpmQMyIxSOomWRbejfCyE637P8ViPFDi5AlRNmaUyHenwtCYD79rdCSYg8ur
    

    将其用作 Kotlin 的输入:

    import java.util.Base64
    ...
    val fromSql: String = "ibGlUpmQMyIxSOomWRbejfCyE637P8ViPFDi5AlRNmaUyHenwtCYD79rdCSYg8ur"
    val decodedBytes: ByteArray = Base64.getDecoder().decode(fromSql)
    

    您可以使用 decodedBytes 作为 Kotlin AES ECB 解密方法的直接输入。

    使用密钥 AN_AES_KEY 解密此输入时,您将在 Kotlin 端获得原始输入:

    output: foobarbazfoobarbazfoobarbazfoobarbaz
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2012-11-13
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多