混淆base 64字符串的好方法是什么?

时间:2011-07-22 20:25:18

标签: base64 obfuscation deobfuscation

Base64编码通常用于混淆明文,我想知道是否有任何快速/简单的方法来混淆基本64字符串,因此它不容易识别。为此,该方法应该对填充字符(='s)进行模糊处理,使它们成为其他符号并且更加分散。

有没有人知道一种简单(且易于翻转)的方法呢?

你可以使用移位密码,但我正在寻找一些更全面的东西,例如,如果我的移位密码映射= a,有人可能会注意到一个经常以a结尾的字符串。

目的不是为了增加安全性,实际上只是让base64无法识别为base 64.它也不需要传递安全性proffesional,只需要知道base64是什么以及它看起来像什么。 Ex(=最后等)

我描述的方法可能会添加非基本的64个字符,比如^%$#@ !,以帮助混淆读者。

大多数回复似乎都是关于为什么我想要这样做的主题,基本的答案是操作将完成多次(所以我想要一些便宜的东西),并在一个完成没有密码可以记住的方式(为什么我不做异或)。此外,数据不是高度敏感的,只是用作针对临时用户的方法,后者可能知道基本64字符串是什么。

6 个答案:

答案 0 :(得分:5)

一些建议:

  1. 剥离任何结尾=(根据Wikipedia不需要它们)然后逐位否定每个字节。这会将文本转换为大多数不可读的字符。
  2. 循环数据和xor每个字符的位置,模256.这将消除任何简单的统计分析,因为每个字符的映射取决于字符串中的位置。

答案 1 :(得分:2)

与Anders Abel的最佳答案中的一点相比,base64字符串中的=符号似乎很重要:

source

答案 2 :(得分:1)

你所要求的是“默默无闻的安全”,通常是一个坏主意。

从未设计或打算使用Base64编码来混淆文本或数据。它用于编码需要通过某些通信通道传输的二进制数据,该通信通道只允许ASCII字符 - 如电子邮件消息,或者是XML的一部分等。

如果要隐藏数据,最好使用真实加密。在任何情况下,即使在加密数据之后,您也需要将其作为XML等传递,您最终可能会再次在Base64中对其进行编码以用于传输目的。

答案 3 :(得分:1)

我想你可以生成少量的随机数据,然后使用它来编码Base64字符。将随机数据添加到重新编码的Base64数据中。

一个非常简单的例子:给定一个输入字符串“Hello”,生成1-9范围内的随机数,并将其用作应用于每个输入字符的偏移量。假设您生成“5”,则重新编码的字符串将为“5Mjqqt”。或者将偏移编码为字母而不是数字(a = 1,b = 2,...)然后每次将“=”填充转换为不同的字符。

或者你可以放下填充物;根据{{​​3}},这不是必要的。

(但是考虑一下这是否真的是一个必要且充分的事情。从你的问题为什么你想要混淆基础64数据,这是不明确的。)

答案 4 :(得分:1)

同意建议使用加密的回复,如果您的要求是实际让某些决定解码数据的人拒绝该过程。

否则,答案在某种程度上取决于您系统的其他限制,但我想到了一些想法。如果您只关心分隔符字符,并且您可以控制生成Base64的过程,那么您可以选择一些方法将数据之前填充到转换中,从而消除'输出中的''字符。

同样,您可以使用其中一种变体,例如'base64url'编码(请参阅http://en.wikipedia.org/wiki/Base64获取有关变体的大量有用信息),但不使用填充字符。

通过其中一种方法消除'='后,您可以在生成的Base64上进行某种字符交换,只需交换其他所有字符,只留下任何最终字符。您也可以将大写或小写字母替换为其他字符,以使其看起来不像Base64一样快速浏览。

然而,无论您选择什么想法,只要记住,如果您需要对该数据进行真正的保护,它将无法替代真正的加密方案。

答案 5 :(得分:0)

Base64通常在您希望数据通过某些可以扭曲非字母数字符号的通道时使用 - 例如在XML中。如果这也是你的任务 - 无论你如何尝试,你的代码都将类似于Base64:)

如果您的频道很好地处理二进制数据 - 那么只需获取源文本(解码Base64),获取它的二进制表示并使用某种xor。例如,使用源字节中的每个字节make xor 37。相同的操作将恢复您的文本。

但是,任何具有密码分析基础知识的人都很容易识别它。如果是问题 - 使用真正的加密。