标签: public-key-encryption

验证用户的私钥以进行网站登录

我正在尝试使用公钥身份验证实现登录系统登录网站.我不确定这是否可行.

这是我打算做的: -

  1. 注册时,用户的公钥将保存在网站中.
  2. 当用户稍后尝试登录时,网站会询问用户其对应的私钥.
  3. 如果私钥与用户在注册时提供的公钥匹配,则对用户进行身份验证.

我见过像startssl.com这样的网站要求用户的私钥来验证他们的身份(参见附件截图).那么实现这样一个系统需要什么呢?

网站要求私钥的屏幕截图

authentication public-key-encryption public-key web

14
推荐指数
1
解决办法
5083
查看次数

Heroku HIPAA合规性

是否可以在符合HIPAA标准的Heroku上运行应用程序?更具体地说,我需要两个应用程序,一个用于存储成员信息,另一个用于存储成员的私人健康信息.我打算使用非对称和对称密钥加密非对称加密敏感数据,以便将成员链接到其他应用程序上的敏感数据,并对成员应用程序中的特定字段进行对称,例如姓名,电子邮件地址和电话.我主要担心Heroku的任何人都可以打破非对称加密,因为他们可以访问这两个应用程序(和私钥).我是否正确地关注这一点,或者Amazon EC2的基础设施是否阻止Heroku员工访问这两个应用程序?

heroku public-key-encryption hipaa

13
推荐指数
1
解决办法
3505
查看次数

在Python中使用RSA加密文件

我正在使用PyCrypto使用RSA实现文件加密.

我知道这有点不对,首先是因为RSA非常慢,其次是因为PyCrypto RSA只能加密128个字符,所以你必须以128个字符的块来爆炸文件.

这是到目前为止的代码:

from Crypto.PublicKey import RSA

file_to_encrypt = open('my_file.ext', 'rb').read()
pub_key = open('my_pub_key.pem', 'rb').read()
o = RSA.importKey(pub_key)

to_join = []
step = 0

while 1:
    # Read 128 characters at a time.
    s = file_to_encrypt[step*128:(step+1)*128]
    if not s: break
    # Encrypt with RSA and append the result to list.
    # RSA encryption returns a tuple containing 1 string, so i fetch the string.
    to_join.append(o.encrypt(s, 0)[0])
    step += 1

# Join the results.
# I hope the \r\r\r sequence …
Run Code Online (Sandbox Code Playgroud)

python encryption public-key-encryption

13
推荐指数
1
解决办法
2万
查看次数

如何在Python中实现OpenSSL功能?

我希望通过公钥加密秘密文本,并通过Python中的私钥解密.我可以通过openssl命令实现:

echo "secrettext/2011/09/14 22:57:23" | openssl rsautl -encrypt -pubin -inkey public.pem | base64  data.cry
base64 -D data.cry | openssl rsautl -decrypt -inkey private.pem
Run Code Online (Sandbox Code Playgroud)

如何在Python中实现它?

python openssl public-key-encryption private-key

13
推荐指数
2
解决办法
1万
查看次数

为什么整数分解是一个非多项式时间?

我只是计算机科学的初学者.我学到了一些关于跑步的知识,但我无法确定我的理解是对的.所以请帮助我.

所以整数分解目前不是多项式时间问题,而是素数测试.假设要检查的数字是n.如果我们运行一个程序只是为了决定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字.我觉得这个程序是多项式时间,不是吗?

我错误的一种可能方式是分解程序应该找到所有素数,而不是发现的第一个素数.也许这就是原因所在.

但是,在公钥加密中,找到大量的主要因素对于攻击密码学至关重要.由于通常大量(公钥)只是两个素数的乘积,找到一个素数就意味着找到另一个素数.这应该是多项式时间.那为什么攻击很难或不可能?

performance cryptography rsa public-key-encryption factorization

13
推荐指数
2
解决办法
6345
查看次数

如何转换String至PublicKey?

我使用以下代码将公钥和私钥转换为字符串

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair          keyPair    = keyPairGen.genKeyPair();
PublicKey        publicKey  = keyPair.getPublic();
PrivateKey       privateKey = keyPair.getPrivate();
String publicK = Base64.encodeBase64String(publicKey.getEncoded());
String privateK = Base64.encodeBase64String(privateKey.getEncoded());
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试将其转换回公共广告私钥

PublicKey publicDecoded = Base64.decodeBase64(publicK);
Run Code Online (Sandbox Code Playgroud)

我收到错误,无法从byte []转换为公钥.所以我试过这样的

PublicKey publicDecoded = new SecretKeySpec(Base64.decodeBase64(publicK),"RSA");
Run Code Online (Sandbox Code Playgroud)

这会导致如下错误

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: Neither a public nor a private key
Run Code Online (Sandbox Code Playgroud)

看起来我在这里做了错误的密钥转换.任何帮助,将不胜感激.

java encryption cryptography public-key-encryption

13
推荐指数
1
解决办法
3万
查看次数

使用命令行对文件夹进行GPG加密和解密

gpg命令行(Gnupg)的手册页有加密和解密文件的命令.这是使用gpg加密/解密文件的标准命令.

gpg --encrypt --recipient xxx@mail.com ~/xxx/xxx.txt - 加密

gpg --output ~/xxx/xxx.txt --decrypt ~/xxx/xxx.gpg - 解密

但如果我有一个包含多个文件和文件夹的文件夹,我如何使用命令行加密它?

encryption gnupg public-key-encryption

13
推荐指数
3
解决办法
2万
查看次数

SSH IdentitiesOnly=yes 转发我的所有密钥

我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥。我有两把钥匙,我们称它们为home_rsawork_rsa。我做了以下事情:

\n\n
eval `ssh-agent`\nssh-add -K ~/.ssh/home_rsa\nssh-add -K ~/.ssh/work_rsa\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的~/.ssh/config文件:

\n\n
Host home\n  ForwardAgent yes\n  HostName home.com\n  IdentityFile ~/.ssh/home_rsa\n  IdentitiesOnly yes\n  User home\n\nHost work\n  ForwardAgent yes\n  HostName work.com\n  IdentitiesOnly yes\n  IdentityFile ~/.ssh/work_rsa\n  User work\n\nHost bitbucket\n  IdentityFile ~/.ssh/home_rsa\n\nHost bitbucket-work\n  IdentityFile ~/.ssh/work_rsa\n\nHost bitbucket*\n  HostName bitbucket.com\n  User git\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我运行以下\xe2\x80\xa6时

\n\n
ssh work\nssh git@bitbucket.org\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6Bitbucket 报告我正在使用我的home用户,尽管我已经清楚地登录到我的work服务器并且应该转发我的work密钥。如果我以相反的顺序添加 SSH 身份并运行上面相同的代码,Bitbucket 会报告我正在使用我的work用户。ssh-add -l从我的服务器运行work,我看到两个 SSH 密钥都被转发,但这不是 …

ssh public-key-encryption ssh-agent

13
推荐指数
3
解决办法
2万
查看次数

InvalidKeyException:无效的密钥格式 java

我正在尝试从 Vault 检索公钥。它被秘密存储。

我正在尝试将检索到的字符串转换为公钥以验证签名。

示例公钥字符串如下所示

-----开始公钥----- MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBWeqVZ8Ub/o4VQ8nnm888B /Ydqv2IN5bObxupZ7njMKuT/WPgwlK8+Wc0Xjhy82E51XW6E4/0um8sIQ1cxvoSO QsrfkRagD+ O9OrjQbb2TqrilDDhFx9EGjXuZpR3brDUufCG6SkypqiKSaMuoVoax c82TZ1uAIp5OSroWt1IdUkvam24X/7zDIf1l8XWCmbfCDrBb73hBYA4MgTjsSckC 5nz+GLcWTfz0wze4lwHCi1KYFv+1+WcYHWPLbqL tc8nzVqkuP5Ne/9HAFkaEAIw5 fKLccksaT/TLyIcrALcfuABlgX1yeBulVcbTAp+WiYRvo9+FKK23pbwkh+uy0tq1 AgMBAAE= -----结束公钥-----

我在我的秘密值中添加了相同的内容,并且没有格式。

但是,使用下面的代码,我在行中遇到错误 InvalidKeyException: INVALID KEY FORMAT

 PublicKey publicKey = fact.generatePublic(pubKeySpec);
Run Code Online (Sandbox Code Playgroud)

这是代码:

            String publicKeyAsString = secretClient.getSecret("key-name").getValue();
    
            byte[] keyContentAsBytes = publicKeyAsString.getBytes();
    
            KeyFactory fact = KeyFactory.getInstance("RSA");
            X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(keyContentAsBytes);
            PublicKey publicKey = fact.generatePublic(pubKeySpec);
Run Code Online (Sandbox Code Playgroud)

用堆栈跟踪编辑:

Caused by: java.security.InvalidKeyException: invalid key format
    at sun.security.x509.X509Key.decode(X509Key.java:386) ~[?:?]
    at sun.security.x509.X509Key.decode(X509Key.java:401) ~[?:?]
    at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:122) ~[?:?]
    at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:330) ~[?:?]
    at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:235) ~[?:?]
Run Code Online (Sandbox Code Playgroud)

编辑:用于测试的公钥:

-----开始公钥----- MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBWeqVZ8Ub/o4VQ8nnm888B /Ydqv2IN5bObxupZ7njMKuT/WPgwlK8+Wc0Xjhy82E51XW6E4/0um8sIQ1cxvoSO QsrfkRagD+ O9OrjQbb2TqrilDDhFx9EGjXuZpR3brDUufCG6SkypqiKSaMuoVoax c82TZ1uAIp5OSroWt1IdUkvam24X/7zDIf1l8XWCmbfCDrBb73hBYA4MgTjsSckC 5nz+GLcWTfz0wze4lwHCi1KYFv+1+WcYHWPLbqL tc8nzVqkuP5Ne/9HAFkaEAIw5 fKLccksaT/TLyIcrALcfuABlgX1yeBulVcbTAp+WiYRvo9+FKK23pbwkh+uy0tq1 …

java digital-signature public-key-encryption public-key

13
推荐指数
1
解决办法
1万
查看次数

完美的前向保密(PFS)如何运作

我在信息技术课上,我在网上偶然发现了这个概念,这引起了我的兴趣.我还看了一些解释这个概念的网站和维基百科,以及stackoverflow上的一些帖子,但我仍然感到困惑.根据我的理解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建会话密钥......如果某人获得了派生会话密钥的私钥,他们可以看到所有数据在这种联系之间发送,即使在过去.

我的理解是,使用PFS,即使以加密形式,也不会发送"会话密钥".它保密,因此即使有人找到私钥,他们也无法访问过去的加密记录信息.它是否正确?

我也很想知道,如果我参加PFS交换,叫我"A",服务器"B",PFS应该处理这样一个事实:如果我的密钥被泄露,A和B的谈话不会因为他们而受到损害不知道会话密钥.但是,如果我的密钥实际上已被泄露,那么"B"如何将我认证为"A"...例如,如何使用我的密钥尝试访问数据来了解我(A)或其他用户(C)之间的区别.

https cryptography public-key-encryption

12
推荐指数
2
解决办法
9663
查看次数