在 IOS 上使用密钥加密 json 数据并使用节点 js 解密

Encrypt json data with secret key on IOS and decrypt it with node js

我需要在 post 上为 CSRF 保护我的 API 并提出请求。

为此,我认为移动设备(例如 iOS)需要向 API 服务器(node.js)发送一个令牌。此令牌必须加密并包含将在服务器端解密的 JSON 数据。

为了解密数据,移动设备使用服务器知道的相同密钥。

例如:{_csrf: 123456789} 将从通过移动设备发送的令牌中解密,并由 API 检查是否匹配。

  1. 这样做对吗?如果不是,正确的方法是什么?

  2. 如何在 iOS 上加密 Jon 数据并在 node.js 上解密? (JWT Token 没有 iOS 的库)

你能给我一个示例代码来加密 iOS 上的数据并解密 node.js 上的数据吗?

只需使用 https,它会加密所有内容,甚至任何查询字符串。

内容使用随机对称密钥加密,该密钥使用证书中的非对称密钥加密。此外,对称密钥的生命周期很短。此外,您不必实施和加密例程。

另请注意,iOS9 默认要求所有连接都使用 https,任何 http 连接都需要在 plist 中列入白名单。

如果您自己加密,您会立即遇到在设备和服务器之间共享加密密钥的问题。这不是一个容易解决的问题。

当从浏览器页面访问 API 时,为了防止 CSRF,您可以在 HTTP headers 中发送令牌,例如 X-CSRF-Token,或者使用饼干。

例如,让您的服务器使用 X-CSRF-Token header 在 HTTP 响应中发送 CSRF 令牌。您可以让您的页面在 POST 或 PUT 上的 JSON 中发回。或者让您的页面从 cookie 中读取它并将其放入 JSON.

(HTTPS 来自浏览器 不会 防止 CSRF,因为任何其他网站上的任何脚本 运行 相同 浏览器可以 POST 免费连接到您的 HTTPS 服务器。您的页面需要有一个令牌,同一浏览器中的其他页面无法访问。)