我必须加密和解密一个字符串,但只有特殊字符 我不希望字母数字成为加密的一部分
我尝试了Rijndael加密,我只得到了aplphanumeric输出
我怎样才能获得特殊字符
是否还有其他特殊字符算法
尝试过TripleDes提供商和相同的结果,是否有任何算法在加密时只选择特殊字符
我有一个产品,在发货之前我生成的串行密钥包含有关许可证的信息,现在当客户端激活软件时我想加密机器名称+串行密钥+主板否生成激活密钥,现在当我的客户打开软件我会解密激活密钥并验证串行密钥,以及他是否正在使用我将与机器ID和主板比较的任何其他机器,因为我需要一个仅包含特殊字符的加密它是可能的,直到现在它还没有工作
答案 0 :(得分:2)
计算机是数字化的。换句话说,他们操作的数据的所有,包括加密的密文输出,都是离散数字。
因此,当您说输出是字母数字时,您实际上是在谈论输出的转换,而不是输出本身。只需对输出使用不同的转换。常见的转换是Base-64和十六进制,但这些不符合您的(相当奇怪的)要求;你可能需要自己做。
例如,您可以用“+”和“ - ”字符表示密文,将这些字符映射到零和一位。当然,这可能会产生一些非常长的字符串!
或者,如果您可以识别16个“特殊字符”,则可以将每个字符映射到4位值,并使用具有特殊字符而非数字和字母的十六进制值。
我可以问为什么你想要这个世界吗?
答案 1 :(得分:1)
从十六进制输出中获取十六进制字符,将它们与一些“特殊”字符一对一映射,然后重新映射解密。
我敢打赌这不能解决任何真正的问题。除了Solitaire之外,自第二次世界大战结束以来,没有多少现代加密系统使用字符而不是字节,我们只是在渲染输出时使用字符。
当然,像这样的映射不会增加任何安全性,只会导致可移植性问题。
答案 2 :(得分:1)
AES / Rijndael输出随机出现的字节;您将获得从0x00到0xFF的所有值。我怀疑发生的事情是,在某些时候,字节被转换为十六进制字符或Base64以允许显示。如果你不想要字符,那么将输出保留为字节数组,不要转换它。
从字节到十六进制字符或Base64的转换对加密的安全性没有影响。它只允许在预期字符数据的系统上传输密文。