Java 字符对字符加密

Java 字符对字符加密,java,encryption,Java,Encryption,是否有任何可用的库/算法具有基于字符对字符的加密机制。我的基本意思是,如果输入文本是someText,那么加密文本应该具有相同的字符数 从我们对非对称加密机制的探索中,我们感觉无法通过这种方式实现字符对字符的加密 该解决方案最好是基于“密钥”的解决方案,因为我们需要通过不同的应用程序对输入文本进行加密[其中一个应用程序实际上是定制硬件中的嵌入式应用程序-制造商更喜欢基于密钥的加密逻辑]。丢失密钥的安全威胁并不显著,是一个可接受的风险。 < P>你考虑过XOR加密吗?< /P> 以下是Java示

是否有任何可用的库/算法具有基于字符对字符的加密机制。我的基本意思是,如果输入文本是
someText
,那么加密文本应该具有相同的字符数

从我们对非对称加密机制的探索中,我们感觉无法通过这种方式实现字符对字符的加密


该解决方案最好是基于“密钥”的解决方案,因为我们需要通过不同的应用程序对输入文本进行加密[其中一个应用程序实际上是定制硬件中的嵌入式应用程序-制造商更喜欢基于密钥的加密逻辑]。丢失密钥的安全威胁并不显著,是一个可接受的风险。

< P>你考虑过XOR加密吗?< /P>

以下是Java示例:


您想要使用流密码,或者(如果您的用例证明是正确的)一次性密码。一次性PAD很难使用-您需要以某种方式将密钥传送给接收方,密钥必须至少与明文一样长,并且在处理传输错误时会出现的所有问题时会遇到很大困难-因此流密码可能是一种可行的方法

RC4可能是适合您的算法

您必须使用字符对字符加密有什么特殊原因吗?像AES这样的对称算法倾向于使用较小的块大小,通常为64位,因此不太可能增加太多的空间开销。如果您可以使用对称分组密码,那么这可能会使事情变得更容易

我不知道你所说的基于“键”的解决方案是什么意思。所有现代加密算法都有密钥,但密钥的性质会因算法而异。对称密码通常有一个共享密钥,非对称算法是使用公钥/私钥的算法。根据不同的情况,有不同的流密码使用这两种类型的密钥


我也有点不确定你所说的“丢失我们的密钥的安全威胁并不严重,而且是一个可接受的风险”是什么意思。如果你丢失了密钥,那么你就没有加密了(至少在你旋转密钥之前)。如果不使用加密是可以接受的,那么为什么您首先要为加密而烦恼呢?如果仅仅混淆数据就足够了,那么这是一个完全不同的问题。

对于与明文长度相同的密码,您需要在CTR模式下使用流密码或块密码。对于流密码,RC4很常见,但已过时。配置文件1组合中有更好的流密码。对于块密码,在CTR模式下使用AES,无需填充。

诀窍是以不需要更多字符的方式在字符之间转换字符。从数学上讲,如果使用流密码(它们执行1:1位加密),就可以做到这一点。唯一的问题是,你只剩下一个可能不合适的“部分”位。我创建这样一个程序只是为了好玩。由于它依赖于巨大的乘法和除法,我很快发现这在性能方面是不可撤销的

所以基本上,你需要的是一个有N个字符的字母表,其中N=2^x。在这种情况下,您只需要换档之类的。或者,如果您有多余的空间,您可以查看文本并合并字段,使它们的大小更接近N(任意N)

你要做的是把你的字段映射到一个0..N的范围,把它放在一个X位数中,把它连接在一起,然后对它进行流加密。您现在应该仍然具有相同的位数。然后将结果映射回原始字母表并存储/发送


这是一个想法,我已经在我的脑海里骑了一段时间了,我从来没有向任何人解释过。因此,如果有任何问题,请让我知道。

我真的很好奇,加密文本中的字符数必须与明文中的字符数相同。如果您需要非对称加密,我会坚持使用众所周知且经过测试的算法,如AES。此外,我不相信这样的算法会如此安全。我很确定AES是对称的。该死!哈哈哈,我不这么理解。无需担心:正如维基百科链接文章中所指出的,通过频率分析,这种方法很容易被打破。如果你想要任何形式的安全性,你需要一个合适的加密算法。谢谢你把它说得这么清楚。我所说的“密钥”是指用于加密/解密的外部文件。我所说的丢失它的威胁,是指一些不受欢迎的人得到它的机会——因此,能够破解我们的加密逻辑。我将试着通过RC4,并用我的发现回复。谢谢。该死的,我一直在考虑用这个主意赚钱,它应该是加密数据库字段的好方法。哦,好吧,它可能已经在某处完成了:)