我正在尝试使用公钥身份验证实现登录系统登录网站.我不确定这是否可行.
这是我打算做的: -
我见过像startssl.com这样的网站要求用户的私钥来验证他们的身份(参见附件截图).那么实现这样一个系统需要什么呢?

是否可以在符合HIPAA标准的Heroku上运行应用程序?更具体地说,我需要两个应用程序,一个用于存储成员信息,另一个用于存储成员的私人健康信息.我打算使用非对称和对称密钥加密非对称加密敏感数据,以便将成员链接到其他应用程序上的敏感数据,并对成员应用程序中的特定字段进行对称,例如姓名,电子邮件地址和电话.我主要担心Heroku的任何人都可以打破非对称加密,因为他们可以访问这两个应用程序(和私钥).我是否正确地关注这一点,或者Amazon EC2的基础设施是否阻止Heroku员工访问这两个应用程序?
我正在使用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中的私钥解密.我可以通过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中实现它?
我只是计算机科学的初学者.我学到了一些关于跑步的知识,但我无法确定我的理解是对的.所以请帮助我.
所以整数分解目前不是多项式时间问题,而是素数测试.假设要检查的数字是n.如果我们运行一个程序只是为了决定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字.我觉得这个程序是多项式时间,不是吗?
我错误的一种可能方式是分解程序应该找到所有素数,而不是发现的第一个素数.也许这就是原因所在.
但是,在公钥加密中,找到大量的主要因素对于攻击密码学至关重要.由于通常大量(公钥)只是两个素数的乘积,找到一个素数就意味着找到另一个素数.这应该是多项式时间.那为什么攻击很难或不可能?
performance cryptography rsa public-key-encryption factorization
我使用以下代码将公钥和私钥转换为字符串
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)
看起来我在这里做了错误的密钥转换.任何帮助,将不胜感激.
gpg命令行(Gnupg)的手册页有加密和解密文件的命令.这是使用gpg加密/解密文件的标准命令.
gpg --encrypt --recipient xxx@mail.com ~/xxx/xxx.txt - 加密
gpg --output ~/xxx/xxx.txt --decrypt ~/xxx/xxx.gpg - 解密
但如果我有一个包含多个文件和文件夹的文件夹,我如何使用命令行加密它?
我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥。我有两把钥匙,我们称它们为home_rsa和work_rsa。我做了以下事情:
eval `ssh-agent`\nssh-add -K ~/.ssh/home_rsa\nssh-add -K ~/.ssh/work_rsa\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的~/.ssh/config文件:
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\nRun Code Online (Sandbox Code Playgroud)\n\n当我运行以下\xe2\x80\xa6时
\n\nssh work\nssh git@bitbucket.org\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6Bitbucket 报告我正在使用我的home用户,尽管我已经清楚地登录到我的work服务器并且应该转发我的work密钥。如果我以相反的顺序添加 SSH 身份并运行上面相同的代码,Bitbucket 会报告我正在使用我的work用户。ssh-add -l从我的服务器运行work,我看到两个 SSH 密钥都被转发,但这不是 …
我正在尝试从 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 …
我在信息技术课上,我在网上偶然发现了这个概念,这引起了我的兴趣.我还看了一些解释这个概念的网站和维基百科,以及stackoverflow上的一些帖子,但我仍然感到困惑.根据我的理解,在典型的HTTPS公钥交换中,浏览器和服务器与密钥一起创建会话密钥......如果某人获得了派生会话密钥的私钥,他们可以看到所有数据在这种联系之间发送,即使在过去.
我的理解是,使用PFS,即使以加密形式,也不会发送"会话密钥".它保密,因此即使有人找到私钥,他们也无法访问过去的加密记录信息.它是否正确?
我也很想知道,如果我参加PFS交换,叫我"A",服务器"B",PFS应该处理这样一个事实:如果我的密钥被泄露,A和B的谈话不会因为他们而受到损害不知道会话密钥.但是,如果我的密钥实际上已被泄露,那么"B"如何将我认证为"A"...例如,如何使用我的密钥尝试访问数据来了解我(A)或其他用户(C)之间的区别.
cryptography ×3
encryption ×3
java ×2
public-key ×2
python ×2
gnupg ×1
heroku ×1
hipaa ×1
https ×1
openssl ×1
performance ×1
private-key ×1
rsa ×1
ssh ×1
ssh-agent ×1
web ×1