2

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

有谁知道一种简单(且容易可逆)的方法来做到这一点?

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

目的不是增加安全性,实际上只是让base64无法识别为base64。它也不需要通过安全专家,只需要知道base64是什么以及它的样子的个人。例如(= 结尾等)

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

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

4

6 回答 6

6

几个建议:

  1. 剥离任何结尾 = (根据维基百科,它们是不需要的),然后按位否定每个字节。这会将文本转换为大部分不可读的字符。
  2. 循环数据和xor每个字符的位置,模 256。这将消除任何简单的统计分析,因为每个字符的映射取决于字符串中的位置。
于 2011-07-22T21:25:53.707 回答
3

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

$ echo -n foobar | base64 
Zm9vYmFy
$ echo -n foobar1 | base64 
Zm9vYmFyMQ==
$ echo -n Zm9vYmFyMQ | base64 -D
foobar$ echo -n Zm9vYmFyMQ= | base64 -D
foobar$ echo -n Zm9vYmFyMQ== | base64 -D
foobar1$
于 2017-05-17T16:44:32.007 回答
1

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

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

如果您想隐藏数据,最好使用真正的加密。无论如何,即使在加密数据之后,您还需要将其作为 XML 等传递,您最终可能会再次将其编码为 Base64 以用于传输目的。

于 2011-07-22T20:50:40.253 回答
1

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

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

或者你可以放弃填充;根据维基百科的文章,这不是真的必要。

(但首先要考虑这是否真的是必要和充分的事情。从你的问题中不清楚为什么要混淆 base 64 数据。)

于 2011-07-22T20:55:44.780 回答
1

同意建议使用加密的答复,如果您的要求实际上是阻止决心解码数据的人逆转该过程。

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

沿着同样的思路,您可以使用不使用填充字符的变体之一,例如“base64url”编码(有关变体的大量有用信息,请参见http://en.wikipedia.org/wiki/Base64 )。

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

但是,无论您选择什么想法,只要记住,如果您需要对数据进行真正的保护,它就不能替代真正的加密方案。

于 2011-07-22T21:00:32.883 回答
0

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

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

但是任何具有密码分析基本知识的人仍然很容易识别它。如果这是一个问题 - 使用真正的加密。

于 2011-07-22T20:37:48.757 回答