我需要创建一个不接受特殊字符的加密类,它只使用字母和数字。 有没有人可以帮助我开发它?
答案 0 :(得分:1)
您不需要创建单独的加密算法来执行此操作。只需使用以下正则表达式验证您的输入:
[A-Za-z0-9]+
这将验证输入仅包含字母数字字符。之后,您可以执行任何所需的加密。
所以,基本上,你可以有一个像下面这样的类(我在这里混合C#和伪代码):
public class Encryption {
private readonly Regex regex = new Regex("[A-Za-z0-9]+");
public string Encrypt(string toEncrypt) {
if (toEncrypt == null)
throw new ArgumentNullException("toEncrypt");
// This check is very important
// If toEncrypt contains non-alphanumeric characters, is an empty string, or consists only of whitespace don't accept it
if (!regex.IsMatch(toEncrypt))
throw new ArgumentException("String is not alphanumeric");
// Obviously pseudocode
// Replace this line with a call to AES, 3DES, Twofish, Caesar Cipher, or whatever encryption algorithm you want
return EncryptionAlgorithm.Encrypt(toEncrypt, whateverKey);
}
}
术语"加密"在这种情况下实际上是模糊的。如果你正在寻找"认真的"加密,您可能想要使用Twofish或Advanced Encryption Standard(AES);两者在这一点上都是高度安全的,并且具有良好的库支持,但AES更好一些。另一个AES contest finalists(例如Serpent)也非常安全,但它们往往不像Twofish和AES那样彻底研究或具有良好的库支持。除非你有充分的理由使用Twofish或其他AES竞赛决赛选手而不是AES,否则最好只使用AES。
我说"此时非常安全"因为安全性本质上与当前技术相关;例如,量子计算机的公钥加密would be broken。 DES被认为是安全的,直到硬件变得足够快brute-force it。 (事实上,它仍然被认为相对安全,可以抵御其他类型的攻击,例如differential crypanalysis)。
请注意,如果您认真对待安全问题,尝试设计自己的算法并不是一个好主意。
还有像Caesar Cipher这样的经典密码。如果您根本不关心安全性,那么您应该只使用这些,因为此时它们已经完全严重。它们不是构建在.NET框架中的,但大多数都很容易实现。
答案 1 :(得分:0)
如果您需要使用Base64或十六进制编码的字符表示,加密会生成二进制输出,而不是字符。