C# 不使用';不要用钥匙

C# 不使用';不要用钥匙,c#,encryption,C#,Encryption,我需要一个不使用密钥的简单加密算法 你们推荐哪一种 如果我使用表单身份验证所具有的内置加密方法如何?(我忘记了它的方法/名称空间)。需要使用加密对象之外的东西进行加密,即使只是因为您需要该对象稍后对其进行解密。这个外在的东西是一把钥匙。没有密钥就没有有用的加密。只有散列。rot13使用算法中已有的密钥。我想这是最接近的了。你所说的加密只是模糊处理。即使这样,它也将是加密,其中密钥嵌入到算法中。在得到任何合理的答案之前,您必须至少提供一个简单的用例。每个对称加密方案都有一个密钥。如果您正在寻找一种

我需要一个不使用密钥的简单加密算法

你们推荐哪一种


如果我使用表单身份验证所具有的内置加密方法如何?(我忘记了它的方法/名称空间)。

需要使用加密对象之外的东西进行加密,即使只是因为您需要该对象稍后对其进行解密。这个外在的东西是一把钥匙。没有密钥就没有有用的加密。只有散列。

rot13使用算法中已有的密钥。我想这是最接近的了。

你所说的加密只是模糊处理。即使这样,它也将是加密,其中密钥嵌入到算法中。在得到任何合理的答案之前,您必须至少提供一个简单的用例。

每个对称加密方案都有一个密钥。如果您正在寻找一种不管理密钥的加密方案,则可以将.NET(2.0及更高版本)中公开的作为System.Security.Cryptography.ProtectedData类进行研究。它使用机器或(更好的)用户的凭据作为加密密钥,对任意数据进行对称加密

byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes
                                            , null
                                            , DataProtectionScope.CurrentUser);

有关更多详细信息,请参阅我的其他答案。

无钥匙加密的问题是,一旦它被破坏,每个人都会被破坏。举个例子。一旦一个人知道了如何逆转加密,每个人的加密都被破坏了(请参阅注释,了解如何不像本例中听起来那么糟糕)


也就是说,你可以使用任何加密算法并对密钥保密,你会得到同样的(坏的)效果。

基本上,密码是一种让Alice告诉Bob即使Eve无意中听到也无法理解的事情的方法

这意味着密文必须有某种方式来区分Bob和Eve

通常,这是一把钥匙。如今,它可以是Alice给Bob而不是Eve的对称密钥,也可以是Bob广播的非对称密钥,这样任何人都可以为他加密只有他才能读取的消息(通常用作传输对称密钥的方式)

算法可以用作密钥,但算法确实不便于分发和保密。最好只使用标准钥匙

如果你愿意指望Bob有动力阅读信息而Eve没有,你可以简单地混淆明文。例如,您可以通过压缩文件来实现这一点。伊芙不能只是读它,她必须把它解开。这样做通常是为了防止夏娃无意中读到一些写给鲍勃的东西,前提是夏娃是值得尊敬的,但偶尔也会犯错误。我脑海中浮现的例子是CVS密码文件;这将阻止系统管理员一眼就能看到密码,但如果有人真的想读它,这是“道德上等同于rot13”

所以,为了给你一个有用的答案,我们需要知道你想用它做什么。数据有多敏感?它落入不友好之手的可能性有多大?你希望谁能读到它


顺便说一句,永远不要使用自己的加密技术。出错很容易,但很难注意到。使用标准算法的标准实现。

作为关于无密钥=无加密的讨论的旁白

也许你真正想要的是在没有用户交互的情况下自动安全地创建和交换密钥。这可以通过使用非对称加密来实现,其工作原理如下:

场景:A需要向B发送消息,并希望确保中间没有人可以阅读消息

A和B发起如下对话:

  • A要求B提供B的公钥
  • B生成公钥/私钥对,并将公钥发送给a
  • A使用公钥加密消息,并发送消息
  • B接收消息,并使用其私钥对其进行解密
  • 这是因为消息是用公钥加密的,只能用相应的私钥解密。所以公钥不必是秘密的。如果中间的人拿起公钥,他就不能用它来解密消息


    如果你在谷歌上搜索非对称加密,你可能会找到大量关于这方面的信息。

    如果你真的在进行混淆,你可以使用PasswordDeriveBytes类从密码创建密钥。然后在AES中使用密钥

    @belgariontheking:13是你需要解密的东西。仅仅因为它被硬编码到rot13算法中并不意味着它不是密钥。我几乎不会称rot13为“加密”@BTK:你第一次是对的。如果将ROT-13中的13构建到算法中,它就不是密钥。密钥是与明文、密文或算法分离的东西。正如您之前所说,如果您将其实现为ROT-X并让用户提供X,那么它就是一个键。@Bill:“键”的概念比您想承认的更抽象。接受rot13算法作为一个黑匣子,您需要使用rot13黑匣子对它创建的消息进行解密的想法本身就是一种密钥。@Welbog:密钥与算法是分开的。黑盒算法本身并不构成密钥。如果我的加密算法是以只有我知道的方式洗牌消息的字节,而我的解密算法是反转洗牌的步骤,那么这不是密钥。ROT-13只是同一过程的一个非常简单的实例。没有密钥就无法加密某些内容。如果没有密钥,任何人都可以恢复纯文本,或者每个人都无法恢复。public string encrypt(string msg){return“secret!!”;}@Princess:public string decrypt(string msg,string realmg){return realmg;}//解密更容易+1-我认为如果你不知道答案,问这个问题是公平的=