Javascript 在服务器上加密数据并在客户端解密

Javascript 在服务器上加密数据并在客户端解密,javascript,python,ios,swift,encryption,Javascript,Python,Ios,Swift,Encryption,我有一个非常简单的iOS和Android应用程序,可以从web服务器下载一个txt文件,并将其预设给用户。我正在寻找一种只有应用程序才能读取文件的方法,这样其他人就无法下载和使用它 我想采取的文件,是在我的计算机上,加密它不知何故,上传结果到服务器,当客户端将下载文件,它将知道如何读取它 做这种事最简单的方法是什么 非常感谢 您可以编写自己的加密算法,也可以使用现有的加密算法,如C库()中的算法,或者在java中使用Android,即bouncy castle或spongy castle 另请参

我有一个非常简单的iOS和Android应用程序,可以从web服务器下载一个txt文件,并将其预设给用户。我正在寻找一种只有应用程序才能读取文件的方法,这样其他人就无法下载和使用它

我想采取的文件,是在我的计算机上,加密它不知何故,上传结果到服务器,当客户端将下载文件,它将知道如何读取它

做这种事最简单的方法是什么


非常感谢

您可以编写自己的加密算法,也可以使用现有的加密算法,如C库()中的算法,或者在java中使用Android,即bouncy castlespongy castle


另请参阅此帖子:

这是一个非常广泛的问题,并且有多种方法可以解决。 首先,您需要选择加密方法以及加密数据的目的

主要有3种加密方法:

1.对称加密 加密程序和解密程序可以访问相同的密钥。这很容易,但它有一个很大的缺点-密钥需要共享,所以如果你把它交给客户端,它可能会被窃取和滥用

作为解决方案,您需要使用另一种方法来发送密钥并在客户端对其进行加密

2.非对称加密 对于非对称加密,情况就不同了。要加密数据,您需要使用公钥/私钥对

公钥通常用于加密数据,但只有使用私钥才能解密。因此,您可以向您的客户分发公钥,他们将能够向您发送一些加密的通信量

但是您仍然需要确保您使用的是正确的公钥,以避免滥用加密

通常,它用于TLS(SSL)、SSH、签名更新等

3.散列(它不是真正的加密) 这是最简单的。使用散列,您会产生一些无法恢复的spring,但使用相同数据将产生相同散列的规则


因此,您可以选择最合适的方法,并尝试在您使用的语言中找到合适的包

嗯,要加密/解密一个文件(或者任何东西),你需要一个加密/解密算法和密钥。如果使用对称加密算法(如AES),则使用相同的算法和密钥进行bot加密和解密

简而言之,您正在寻找一种对称加密算法,如AES,您可以在此处找到(在其他工具中)——


现在,假设您有一个用户注册系统(或者要求输入密码),您可以使用用户密码+salt作为安全随机数生成器(例如Blum Blum Shub)的种子,该生成器将为每个用户生成一个密钥(以及每个此类用户的一个恒定密钥),以在客户端加密/解密文件。请注意,这将导致同一用户使用相同的密钥加密每个文件。要获得更多信息,您可以(例如)将文件名合并到密钥中,以便每个文件都有一个不同的密钥。

不要重新发明轮子,使用现有的已建立的工具进行安全传输。您不需要自己显式地进行任何加密。虽然免责声明我不是一个移动开发者,但这样做应该可以做到。上传文件到服务器时做一些简单的事情,用一些逻辑加密,比如位移位,下载完文件后在移动设备上阅读,只需用反向逻辑解密。这只是一个例子,有很多方法可以做到加密和解密。@johnykumar绝对不是,这是一个糟糕的建议。位移位不是加密。加密有很多种方法,但唯一正确的方法是使用标准库。I’我试图告诉他如何使用,而不是使用什么。这只是一个例子,位移位也会改变格式,使其他人无法阅读。你可以加密你想要的一切,但是,您似乎在询问如何对客户端应用程序进行身份验证和授权,这是不可能的(DRM是朝这个方向迈出的一步)。如果这不是你要问的,那么请澄清你的问题,并包括一个你想要防范的可能的攻击场景。必须建议不要这样做。已经有一些库可以透明地进行安全的文件传输。不要自己做加密,你会把事情搞砸的。这件事错得太多了。散列不是加密。TLS/SSL仅对握手(身份验证和对称会话密钥交换)使用非对称,然后对大部分数据交换使用对称会话密钥。但最重要的是,您不需要自己进行任何加密,因为已经有库可以透明地进行安全数据传输。谢谢您的评论!我同意重新发明轮子不是做事情的最佳方式。关于TLS/SSH,这只是一个使用非对称加密的示例。如果你知道更多的细节,请发表一个建设性的回答,我会很高兴看到的。很高兴看到你知识渊博和热情,抱歉,如果我说得太苛刻了。我的观点是,他不需要考虑所有这些细节,也不需要咨询密码专家。只需选择一个做他想做的(实际上还没有明确定义)的库并使用它。以前都做过。哈希不是加密,请将答案更改为正确的WRT哈希。谢谢你的答案。如果我将使用这个工具来加密文件,我将如何使用swift/Java对其进行解密?如果您需要Java工具,Java有自己的工具(我链接了这个工具,因为您标记了python)。java有用于加密的密码类-不要使用Blum-Blum-Shub,使用当前的方法,如PBKDF2(基于密码的密钥派生函数)。这正是我所需要的。谢谢!