问题标签 [cryptico]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
812 浏览

javascript - cryptico.js 的实际使用

Cryptico 看起来像是一个超级灵巧的 RSA 加密库。

cryptico.wwwtyro.net

关于 JavaScript 应用程序,假设我想向客户端发送数据,让他们对数据执行某些操作,然后将其传回。如何使用 RSA 确保客户端发回服务器的数据不被篡改?由于 JavaScript 很容易被逆向工程,cryptico 是否有任何实际的客户端应用程序?

0 投票
1 回答
1585 浏览

c# - cryptico.js 加密消息,必须在 C# 中解密

我需要能够使用 C# 解密服务器上的字符串,但该字符串是使用公钥加密和客户端上的 cryptico.js 加密的。有关详细信息,请参阅末尾的上下文。

Cryptico 给了我一个这样的私有 RSA 密钥(注意 - 'like' this - 我为这个问题创建了一个新密钥):

...加上一堆方法。

我正在尝试解密它:

但这会抛出异常“坏数据”。

有没有比 C# 更有经验的人知道我哪里出错了?

谢谢,

G


上下文详细信息:我正在尝试在应用程序的客户端和服务器端实现密码强度检查功能,但仅在服务器端使用代码。为了在客户端实现这一点,我想将假定的密码发送到服务器,判断它的强度,然后返回一个显示在客户端上的分数。这意味着我只需要在服务器上维护密码强度检查代码。作为一项额外的安全措施,我使用 cryptico.js 库对假定密码进行加密,然后将其发送到服务器进行判断。

0 投票
1 回答
1773 浏览

php - PHP中加密文本的解密

我正在尝试在 PHP 中解码加密数据,但是返回值一直返回为空。

要解密的数据作为数据参数进入 PHP 文件。

上面的函数来自 Stack Overflow 上另一个帖子的第二个响应: 如何在 javascript 中加密数据并在 php 中解密?

我假设解密后的值在 PHP 变量 $sensitiveData 中。

当我在屏幕上回显它时,我什么也得不到。

想法?

更新: openssl_private_decrypt() 的返回值为 FALSE,返回值为 NULL。

更新 2:我从以下 URL 创建了公钥/私钥。 http://shop-js.sourceforge.net/crypto2.htm

在底部,有一行:并将以下内容放入您的私人脚本中(可能在您的本地硬盘上 - 而不是在互联网上 - 如果找到您的私钥,这整个事情都是无用的。)

我将翻译的“var key=”行复制到 PHP(根据我的其他帖子)。上面的翻译使用嵌入式数组。然后我将该密钥传递给解密函数。

我的想法是 PHP 文档将私钥称为“混合”。我想知道是否可能需要不同格式的私钥。

这是输出:

0 投票
1 回答
7243 浏览

javascript - 使用 Cryptico.js 加密,使用 OpenSSL 解密

我在服务器上创建一个公钥/私钥,将密钥发送到 JavaScript 客户端,在那里它加密用户密码。客户端将密码发送到服务器,服务器使用私钥对其进行解密,但密码返回为空。我已经验证了所有支持这种情况的值都是正确的,所以这与加密/解密有关。我哪里错了?

可能是 cryptico.js 与 php openssl 不兼容吗?

图书馆信息:

https://github.com/wwwtyro/cryptico

http://www.php.net/manual/en/function.openssl-pkey-new.php

以下是相关的代码片段:

PHP - 创建公钥/私钥

JavaScript - 客户端使用公钥加密数据。

PHP - 服务器收到加密密码并尝试解密失败

0 投票
0 回答
292 浏览

javascript - 使用 phpseclib 和 Cryptico 进行 RSA 加密/解密

我正在拼命寻找一种方法来加密/解密使用 Cryptico 的 javascript 和使用phpseclib解密/加密之间的数据。

0 投票
1 回答
1193 浏览

javascript - 使用 PHP 使用 Cryptico 公钥加密消息

是否可以使用Cryptico从密码短语生成 RSA 公钥,然后使用 PHP 使用该公钥加密消息,并使用 JavaScrpt 使用原始密码对其进行解密?

Cryptico 本身似乎工作得很好,但我正在尝试使用 phpseclib 使用 Cryptico 生成的公钥加密消息,但我没有得到输出。即使我这样做了,我是否能够对其进行 base64 编码并使用 Cryptico 对其进行解密?

使用位设置为 1024 的 passphase“stackoverflow Rocks”,我得到了这个公钥:

XEjrqvt5K3pjM2m98ZFQOf9fObVNKPJQ9TYbo4sdNPaUO0NKdLtno8hXa292MiAmwip9JOiplmSQVEvpEnfebGNFFzqNgd4hAS6oXD6zHexVHsHpFTYxfVFQE93eHtbz0Mi7l64rnq6UOQKAB53CXVUev6RqyR6hs4oBiJRAOCs=

但是,当我使用带有或不带有 PKCS1 行的以下代码时,我没有得到任何输出。

有谁知道我缺少什么来完成这项工作?- 或者这是不可能的,我在浪费我的时间?

编辑:------------代码我正在使用重新 owlstead 的评论 ------------- 尝试使用和不使用 PKCS1 行

0 投票
2 回答
1997 浏览

php - 基于 Javascript 的 SSL

我已经看到了一些类似的问题,这些问题似乎并不能完全解决我的确切用例,我认为我已经找到了答案,但是在安全性、RSA 和几乎所有方面我都是菜鸟与之相关的一切。我对这些概念有基本的了解,但到目前为止我所做的所有实际实现都是关于编辑别人的代码而不是生成我自己的代码。无论如何,这就是我所在的位置:

我知道 Javascript 是一个天生不好加密的地方。有人可能会在您的响应中充当中间人并破坏 JS,因此您最终将通过网络发送未加密的数据。它应该通过 HTTPS SSL/TLS 连接来完成,但是这种托管需要花钱,而且官方签名的证书也是如此,实际上应该与连接一起使用。

话虽这么说,我认为我将这样做的方式绕过了 JS 加密的中间人弱点,因为我只为一个 RESTful 加密一件事(密码哈希)服务调用,然后仅使用该密码哈希对来自客户端的请求进行签名,以便将它们验证为来自请求声明的用户。这意味着 JS 只负责在创建用户帐户时加密密码哈希一次,如果服务器无法解码该密码,则它知道它已经拥有。

我还将保存一些客户信息,特别是$_SERVER['REMOTE_ADDR']为了保证有人不会对注册交换本身进行 MitM。

我正在使用 PHP 的openssl_pkey_函数来生成非对称密钥,并在客户端使用Cryptico库。我的计划是让用户向 REST 服务发送“预注册”请求,这将导致服务器生成密钥,将私钥和客户端信息存储在电子邮件地址索引的数据库中,然后响应与公钥。

然后,客户端将使用公钥加密用户的密码哈希,并将其作为另一种请求类型发送到 REST 服务以完成注册。服务器将解密并保存密码哈希,使客户端信息和私钥无效,因此无法使用该信息进行进一步的注册,然后以200状态码进行响应。

要登录,用户将输入他们的电子邮件地址和密码,密码将在注册期间被散列,附加到请求正文,并再次散列以签署对登录端点的请求,该端点将尝试将存储的散列附加到请求正文并对其进行哈希处理以根据请求中的签名验证签名,从而对用户进行身份验证。对服务的进一步数据请求将遵循相同的身份验证过程。

我错过了任何明显的漏洞吗?是否有可能将$_SERVER['REMOTE_ADDR']价值欺骗特定的东西?我不需要IP地址准确或与用户登录时相同,我只需要知道“预注册”并获得公钥的同一台机器跟进并完成注册而不是劫机者使用窥探的公钥为他们完成注册。当然,我猜如果他们能做到这一点,他们在创建时就已经劫持了无法恢复的帐户,并且合法用户将无法使用自己的密码完成注册,这也可以。

底线,除非我为真正的 SSL 主机分叉,否则有人还能破解我的服务吗?我是否绕过了 Javascript 作为加密工具的弱点?


当我编写和调试我的代码时,如果有人想使用它,我会在这里发布。如果我让我的网站受到任何形式的攻击,请告诉我。

这些函数根据标头中的散列验证客户端请求、生成私钥、将其保存到数据库、使用公钥响应以及解密和检查密码散列。

0 投票
1 回答
1142 浏览

javascript - 如何使用 cryptico.js 生成的 PHP 签名进行验证

在发送到 PHP 应用程序之前,我尝试在 javascript 中对消息进行签名。PHP 应用程序必须检查签名以确保它不是假的。

在 javascript 中,我使用 cryptico.js。

这是给消息签名的js函数

这是获取公钥的函数:

例如,对于消息“message”和密码短语“test2”,公钥和签名是

qH/J3/gvF/h5U02uPyC9Qzn/hHEV5DzB9nFfqk5zbQqHdInVe4sfL+npa+4fjLGrBU30Iuvcr+o9paEjzpH5dY48cq6JHqz1RyJ0CQIc2Jr5+sS4eL1ZIjxWlyN1pKMR+4aE2rlDAad56Ad1cytiaHuVvyK/gdtbKiuGroSQhJ1EVfZ60m3NIqnqmpi5Zdsnmzny4VH/d66BcGXxGaGaUaqFn0WTypuwIMZMMtzZEK7peKoaW4H4rfkfdrKcD8AaT+z9v5lLGkTl0NcZZ4LN9sSUzsHNfyAFK6cSXo/73z0tDAlGb5K+yWV6UHoYW1rcoIsxlNRZM6/6FYgMXbbfow==

XbF4O6v6oadEQGtdpQ7d54Q2JB9/ZEXEUH3S1FMn4E/PSqk7HLXjG4tNfuiUBa5eS8kYV49gwC8Yr+mn6YUAHt+K9lHPSsmltWoiHNOaas4aqai9nlyeft4TYYhP+GYbQfw+3n2TcO39s6M0vw0m0a8AX9JfF02JwCUhP4bu4dzG6Bl5dj000TbUkric14Jyurp8OHmmMvKW62TvXPhNOW39+wS1Qkfn9Bxmzi8UEVSVe3wP45JWZNgmgeGnpubDhD05FJEDErfVtZ/DRKD81q5YRd4X4cCkeDPDcJLgKW1jkCsA7yBqESXPDSkkrVUM06A9qMFUwk4mRI88fZ8ryQ==

我在问我如何在php中验证它?

我尝试了类似的东西:

我认为签名和/或公钥的格式不适合 php。任何想法?

先感谢您,

[编辑] 我不确定签名是否正确。如果我使用 js 函数cryptico.b64to16(signature),签名将类似于:

5db1783babfaa1a744406b5da50edde78436241f7f6445c4507dd2d45327e04fcf4aa93b1cb5e31b8b4d7ee89405ae5e4bc918578f60c02f18afe9a7e985001edf8af651cf4ac9a5b56a221cd39a6ace1aa9a8bd9e5c9e7ede1361884ff8661b41fc3ede7d9370edfdb3a334bf0d26d1af005fd25f174d89c025213f86eee1dcc6e81979763d34d136d492b89cd78272baba7c3879a632f296eb64ef5cf84d396dfdfb04b54247e7f41c66ce2f141154957b7c0fe3925664d82681e1a7a6e6c3843d3914910312b7d5b59fc344a0fcd6ae5845de17e1c0a47833c37092e0296d63902b00ef206a1125cf0d2924ad550cd3a03da8c154c24e26448f3c7d9f2bc9

我不确定 $rsa->verify 的参数键的格式。我尝试添加前缀 ssh-rsa。但效果并不好。

所以我尝试了 to 签名格式和 to 密钥。消息每次都“未经验证”

0 投票
1 回答
2317 浏览

javascript - 从 Cryptico.js 中提取 RSA 私钥

我相信这是一个非常基本的问题,但我开始研究 JavaScript 和 RSA,所以我有点迷茫。我刚刚下载了库 Cryptico,它为我提供了一个易于使用的 RSA 密钥生成/加密/解密。生成的 RSA 密钥的公共部分,只需使用以下命令即可轻松提取:

publicKeyString(RsaKey)

这是:

rsakey.n 是在函数中生成密钥时定义的:

但是密钥的私有部分,我就是不明白如何提取,所以我可以保存公钥/私钥部分供以后使用。

图书馆文档: https ://github.com/wwwtyro/cryptico

0 投票
1 回答
995 浏览

javascript - 从 Cryptico.js 保存 RSA 密钥对象

我正在努力发现如何将 javascript 对象转换为某个变量(数组?)并使用如下代码保存它:

为什么?

cryptico 库(文档:github)为我提供了一个易于使用的 RSA 接口。但是当生成的密钥对是一个对象时,我的噩梦就来了。我不知道如何将这个对象从客户端的浏览器导出到一个文件中,以备后用。密钥的公共部分,可以通过函数转换成字符串

公钥字符串

但私密的部分,是在对象内部。我阅读了 RSA 算法,发现“d”在私钥中很重要,并且我在 rsa.js 内部的密钥生成函数中有“d”

我试图获取这个值并放入一个字符串,但没有奏效。不知道还能做什么。感谢任何帮助。