Php 如何加密字符串数据,使其只能由其所在的计算机解码?

Php 如何加密字符串数据,使其只能由其所在的计算机解码?,php,javascript,encryption,Php,Javascript,Encryption,假设我有通过AJAX从客户端和服务器来回发送的字符串 但是,我希望在通过客户端发送之前对其进行安全加密。一旦它在服务器上,就应该对其进行解密和处理 此外,密码加密是如何工作的?用户注册后,输入密码后,其密码将在服务器上加密,并存储在数据库中。用户登录时会发生什么情况?用户密码是否再次加密并与数据库中的密码匹配 An可以这样使用: 服务器生成一对私钥/公钥 客户端(通过AJAX)向服务器请求其公钥 客户端使用公钥加密数据 客户端向服务器发送加密数据 服务器使用私钥解密数据 所有这些东西都已经实现并

假设我有通过AJAX从客户端和服务器来回发送的字符串

但是,我希望在通过客户端发送之前对其进行安全加密。一旦它在服务器上,就应该对其进行解密和处理

此外,密码加密是如何工作的?用户注册后,输入密码后,其密码将在服务器上加密,并存储在数据库中。用户登录时会发生什么情况?用户密码是否再次加密并与数据库中的密码匹配

An可以这样使用:

  • 服务器生成一对私钥/公钥
  • 客户端(通过AJAX)向服务器请求其公钥
  • 客户端使用公钥加密数据
  • 客户端向服务器发送加密数据
  • 服务器使用私钥解密数据

  • 所有这些东西都已经实现并测试过了,那么为什么要重新发明轮子而不是直接使用HTTPS呢?这将保证客户端和服务器之间的任何交换都将被加密。

    关于登录问题

    有很多方法可以使用密码。最直接的(但不太安全的)是密码本身被发送到服务器的位置。其他方法仍然需要发送密码,但密码是加密的,例如使用服务器的公钥。其他方法涉及身份验证挑战,其中服务器发送一个随机值/字符串,客户机通过某种散列函数(当然包括密码作为密钥)对其进行转换,转换结果发送给服务器,服务器将其与同一进程的自身计算进行比较。使用质询的优点是它可以防止中间人攻击,因为每次验证消息都不同(固定消息将允许“中间人”重播与密码传递相关的记录的数据包序列,从而错误地识别自己)

    关于[措辞糟糕]主要问题(“只能在其所在的计算机上解码”…)

    在给定的计算机(MAC地址)上存在多个物理设备(加密狗等)以及固有的标识指示器,以及硬盘上的逻辑结构/内容(尽管我们进入了“软”区域,即更容易携带的区域…),可用于识别给定主机,然后提供必要的元素(键等)来解码消息。

    但是,我认为这个问题更一般:


    两台计算机可以秘密共享一个密钥,用于交换其他计算机无法(轻松)解密的信息。这些密钥可以在外部放置到位,也可以在每个新会话的运行过程中协商,最初使用公钥加密,例如

    ,尽管使用公钥/私钥对可以有效地共享短消息(通常是对称加密密钥或简单密码),https中的大部分加密交换都是通过对称加密完成的。当然,对称算法应该用于更大的数据有效负载。SSL中也很可能内置了防御措施,您在使用自己的加密方案时甚至不会想到这些。如果专家们已经建造了足够安全的东西,我甚至不会想尝试建造我自己的。有太多模糊和复杂的攻击,可以作出。