Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Passwords 基于密码的加密技术是如何工作的?_Passwords_Encryption - Fatal编程技术网

Passwords 基于密码的加密技术是如何工作的?

Passwords 基于密码的加密技术是如何工作的?,passwords,encryption,Passwords,Encryption,假设我有一些数据和密码,我想对数据进行加密,以便只有使用正确的密码才能恢复数据 这在技术上是如何工作的(即如何实施)?我经常听到人们使用比特转移进行加密,但如何基于密码?基于密码的加密是如何工作的 MacOSX就是一个例子 谢谢 如果您给出示例代码,最好是C、Objective-C或伪代码。一种简单但不完全安全的方法是按密码确定的数字旋转每个字节。您可以使用字符串中的哈希代码,或者计算字符数,或者对数字执行任何操作 不过,您可能想到的是公钥加密。这里有一个指向文档的链接,该文档将告诉您它的数学

假设我有一些数据和密码,我想对数据进行加密,以便只有使用正确的密码才能恢复数据

这在技术上是如何工作的(即如何实施)?我经常听到人们使用比特转移进行加密,但如何基于密码?基于密码的加密是如何工作的

MacOSX就是一个例子

谢谢



如果您给出示例代码,最好是C、Objective-C或伪代码。

一种简单但不完全安全的方法是按密码确定的数字旋转每个字节。您可以使用字符串中的哈希代码,或者计算字符数,或者对数字执行任何操作

不过,您可能想到的是公钥加密。这里有一个指向文档的链接,该文档将告诉您它的数学原理——您必须自己计算实现细节,但一旦您理解了数学原理,就不那么难了。

对于(对称)加密,您需要密钥进行加密和解密

通常,您提供的密码用作此密钥的源。出于各种安全原因,密码没有(而且由于所用密码的要求,通常不能)直接用作密钥。相反,使用a从密码生成密钥

这就是为什么加密密码必须很长且相当随机的原因:否则产生的密钥将只来自可能密钥的一小部分,然后可以简单地尝试所有密钥,从而强制加密

关于代码示例,有几种可能性:

  • 查看加密库的源代码,例如
  • 查看实现加密的程序的源代码,例如
  • 谷歌一些简单加密算法的示例源代码,或密钥派生函数,并尝试理解它

这取决于你想学什么。

你需要从其他资源中寻找深入的解释,因为这个问题非常广泛


一般来说:正如sleske所指出的,您使用密码作为加密密钥的“种子”。然后使用此密钥应用双向加密算法(即,可以一次加密,一次解密)。当你将算法应用于一段数据时,它会以这样一种方式被加密:如果不使用相同的密钥,你将永远无法再次获取数据,如果没有与种子相同的密码,你实际上无法生成相同的密钥。

如果你对加密感兴趣,请阅读Bruce Schneier的Applied Cryptography。优秀的阅读,大量的例子。它经历了许多不同的密码学类型。

大多数分组密码的基本构造块是一种称为a的结构。这相当容易理解


流密码甚至更简单——它们本质上只是伪随机数生成器,尽管具有一些重要的安全属性,其中初始内部状态来自密钥。

基于密码的加密是对称的。除了密码外,输入通常还包括一个salt。FooBabel有一个很酷的应用程序,你可以在其中玩这个。。。目前,为了简单起见,他们将Salt硬编码为8字节(0到7)的数组。我请求他们允许用户输入盐。无论如何,这里是-

对称加密可能也适用于此。您的意思是,“通常,您提供的密码不用作此密钥吗?”?那一段的第一句和第二句似乎是矛盾的。@Thanatos:Oops,那不是我的意思。谢谢你指出这一点;修正了。我很感谢你的回答,这让我了解了密钥派生函数的概念。我仍然不明白为什么这看起来如此复杂,不知道你是否有建议:谢谢!环顾一下河豚:一个正确而完整的答案是大约两年的研究生课程,内容包括计算机科学和数学。许多博士都是关于加密的……你可能不想做的一件事就是滚动你自己的加密库,至少如果你真的关心加密数据的安全性的话。正确使用加密是很困难的。