加密和解密只有特殊字符

时间:2011-12-08 09:31:10

标签: c# encryption character-encoding

我必须加密和解密一个字符串,但只有特殊字符 我不希望字母数字成为加密的一部分

我尝试了Rijndael加密,我只得到了aplphanumeric输出

我怎样才能获得特殊字符

是否还有其他特殊字符算法

  

尝试过TripleDes提供商和相同的结果,是否有任何算法在加密时只选择特殊字符

     

我有一个产品,在发货之前我生成的串行密钥包含有关许可证的信息,现在当客户端激活软件时我想加密机器名称+串行密钥+主板否生成激活密钥,现在当我的客户打开软件我会解密激活密钥并验证串行密钥,以及他是否正在使用我将与机器ID和主板比较的任何其他机器,因为我需要一个仅包含特殊字符的加密它是可能的,直到现在它还没有工作

3 个答案:

答案 0 :(得分:2)

计算机是数字化的。换句话说,他们操作的数据的所有,包括加密的密文输出,都是离散数字。

因此,当您说输出是字母数字时,您实际上是在谈论输出的转换,而不是输出本身。只需对输出使用不同的转换。常见的转换是Base-64和十六进制,但这些不符合您的(相当奇怪的)要求;你可能需要自己做。

例如,您可以用“+”和“ - ”字符表示密文,将这些字符映射到零和一位。当然,这可能会产生一些非常长的字符串!

或者,如果您可以识别16个“特殊字符”,则可以将每个字符映射到4位值,并使用具有特殊字符而非数字和字母的十六进制值。

我可以问为什么你想要这个世界吗?

答案 1 :(得分:1)

从十六进制输出中获取十六进制字符,将它们与一些“特殊”字符一对一映射,然后重新映射解密。

我敢打赌这不能解决任何真正的问题。除了Solitaire之外,自第二次世界大战结束以来,没有多少现代加密系统使用字符而不是字节,我们只是在渲染输出时使用字符。

当然,像这样的映射不会增加任何安全性,只会导致可移植性问题。

答案 2 :(得分:1)

AES / Rijndael输出随机出现的字节;您将获得从0x00到0xFF的所有值。我怀疑发生的事情是,在某些时候,字节被转换为十六进制字符或Base64以允许显示。如果你不想要字符,那么将输出保留为字节数组,不要转换它。

从字节到十六进制字符或Base64的转换对加密的安全性没有影响。它只允许在预期字符数据的系统上传输密文。