【问题标题】:AES 128 bit encryption for Informatica PowercenterInformatica Powercenter 的 AES 128 位加密
【发布时间】:2018-09-21 17:37:11
【问题描述】:

在 oracle 数据库中,我有一个表,其中有一列包含长度为 17 个 ASCI 字符(136 位)的“单词”。我想在 Informatica Powercenter v10 中使用 AES 128 位加密这些词。这是不可能的,因为纯文本是 136 位,大于 128 位,最后一个字符将被忽略。 Informatica 没有更高位的加密方法。在这种情况下我应该如何处理?大家有遇到过这种情况吗? 我想我把这 17 个字符的单词分解成更小的单词,然后分别加密/解密它们,然后将它们连接起来。

提前谢谢你!

【问题讨论】:

  • 这对于任何现代平台来说都不是问题。是的,AES 具有 128 位的块大小,但实施应根据需要自动加密更多块。您可能对 cryptographic padding 感兴趣以供进一步阅读。
  • informatica AES 实施的版本只使用前 16 个字符,而忽略其余字符。它没有实现任何进一步的块。此外,我无法更改 Informatica 中的 aes 函数
  • 那太糟糕了。我的下一个方法是你建议的 - 分成两半并加密。
  • @StefanCreanga 找到支持任意数据长度的完整 AES 实现。同样正如 Luck 提到的,你还需要填充或不需要填充的模式。

标签: encryption aes informatica-powercenter


【解决方案1】:

这看起来好像您正在使用“单词”作为加密keyAES_ENCRYPT函数需要两个参数:

  • value - 要加密的字符串。如果我的理解是正确的,那么你的“话”应该去。这里没有特殊的长度限制,所以可以使用任何字符串端口。
  • key - 要使用的加密密钥。 限制为 16 个字符。这应该在以后的某个时间点用于解密。

===================== 更新=====================

从下面的 cmets 了解详细信息,我试图重现该错误。我将一个非常简单的映射放在一起,它使用两个端口来生成加密文本:

  • AES_ENCRYPT('Some 16char text', 'mykey') - 按照说明,此文本正好有 16 个字符
  • 1AES_ENCRYPT('Some 16char text, plus more text.', 'mykey')1 - 完全相同,16 个字符文本加上一些附加字符。

我要证明的是输入被截断为 16 个字符,无论其长度如何,因此AES_ENCRYPT 的输出将是相同的。 映射:

这是输出:

我的 SQL Server 目标中也出现了同样的情况:

确实:结果完全一样,文本似乎被截断了。你是对的!

我只想在此说明,如果您有此准备,那就太好了。这样可以节省我一些时间。

====================== 解决方案=====================

现在,能够重现并确认问题,我尝试解决它。​​

结果是:

SQL 服务器:

你是对的:文本被截断了。所以我改变了端口的长度:

希望这会有所帮助!

【讨论】:

  • 明文(值)也有128位的限制
  • 不,它没有任何限制。请看这里的两个例子:upper 演示了 key-too-long 问题,在下面的屏幕上你可以看到一切都很好:imgur.com/a/ggINzJJ
  • 尝试以下场景:加密两个 17 个字符长的字符串并仅修改其中一个字符串的最后一个字符(这正是我在影响 800 万份合同的 PROD 环境中遇到的情况)。加密的结果将是相同的,因为您必须提供不高于 128 位的 AES_ENCRYPT 功能块。如果您输入的值高于 128,则 AES_ENCRYPT 会破坏 128 位数据块中的字符串,它只会删除高于 16 的字符。请证明这是错误的
  • 而“不错”的部分是它不会返回任何错误,它可以正常工作
猜你喜欢
  • 2019-08-17
  • 2020-04-15
  • 1970-01-01
  • 2016-05-26
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多