我对Diffie-Hellman密钥交换期间中间人攻击的机制有疑问.我听说在密钥协议通信期间可能会发生这种情况.但是在CA(证书颁发机构)存在的情况下,接收方可以在收到发送方的公钥时对发送方进行身份验证.因此,中间人攻击怎么可能?
我回顾了很多论坛和例子,但没有人帮助我.我需要从任何Web服务验证签名.我有带有公钥的test.crt文件进行验证.
static bool Verify(string text, string signature)
{
X509Certificate2 cert = new X509Certificate2(
HttpContext.Current.Server.MapPath("test-server.cert"));
RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PublicKey.Key;
// Hash the data
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] sign = Convert.FromBase64String(signature);
byte[] hash = sha1.ComputeHash(data);
return csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), sign);
}
Run Code Online (Sandbox Code Playgroud)
但结果总是假的:(
我有一个OpenSSL示例:
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub -signature signature.bin from_gateway
Run Code Online (Sandbox Code Playgroud) c# cryptography digital-signature public-key-encryption x509
在Swift中,我SecKeyRef通过调用SecTrustCopyPublicKey一些原始的X509证书数据来创建一个对象.这就是这个SecKeyRef对象的样子.
Optional(<SecKeyRef algorithm id: 1,
key type: RSAPublicKey,
version: 3, block size: 2048 bits,
exponent: {hex: 10001, decimal: 65537},
modulus: <omitted a bunch of hex data>,
addr: 0xsomeaddresshere>)
Run Code Online (Sandbox Code Playgroud)
基本上,这个SecKeyRef对象包含大量关于公钥的信息,但似乎没有办法将它实际转换SecKeyRef为字符串NSData,或其他任何东西(这是我的目标,只是为了得到一个base64公钥).
但是,我有一个函数,我可以给一个modulus和一个exponent,它只会计算公钥是什么.我通过传递从上面记录的数据来测试它SecKeyRef.
但不知怎的,我无法从SecKeyRef对象访问这些属性(我只能在控制台中看到整个对象;例如,我SecKeyRef.modulus似乎无法做或任何类型的东西,似乎).
我的问题:我如何访问SecKeyRef.modulus,或者将其转换SecKeyRef为NSData类似的东西?谢谢
(欲获得更多信息)
我正在创建我的SecKeyRef动态,通过这个函数,我有:
func bytesToPublicKey(certData: NSData) -> SecKeyRef? {
guard let certRef = SecCertificateCreateWithData(nil, …Run Code Online (Sandbox Code Playgroud) 我有一个TFS服务器,它使用git进行源代码控制.如何使用ssh样式的公钥/私钥来从TFS服务器推/拉/取?也就是说,我在哪里可以在TFS服务器上添加公钥?
我想在我的Android应用程序中使用Curve25519在本地加密/解密AES加密密钥.我不需要任何密钥交换,密钥协议或签名.为什么我需要使用那条特定的曲线?因为我需要能够自己提供私钥并能够计算它匹配的公钥.所以就我而言,只有Curve25519这样做.如果我错了,请纠正我.
所有Curve25519实现都只进行密钥生成,密钥交换和签名/验证.
在获得Curve25519私钥/公钥后,是否可以进行数据加密/解密,或者您可以建议任何符合我标准的替代曲线?
编辑
那我为什么需要这个呢?我会更仔细地解释一下.我的应用正在进行本地文件加密,尤其是照片.我的目标是让用户无需输入密码即可拍照,然后输入密码进行查看.为此,我需要能够从密码创建公钥/私钥对,并且只要提供相同的密码,就能够在运行时重新创建相同的密钥对.所以在第一次运行时,我从密码生成ECC密钥对,并在设备上存储公钥.当用户想要使用新的照片应用程序使用随机256位AES密钥加密照片,然后使用存储的公钥加密该密钥.当用户想要查看照片时,他/她提供正确的密码,我获得相同的ECC密钥对并使用我的私钥解密AES密钥,然后我可以使用AES 256解密照片.
所以,就我而言,Curve25519可以给我这种能力,或者还有其他选择.欢迎使用Java中的代码示例!
java android cryptography elliptic-curve public-key-encryption
我必须通过未加密的通道(HTTP,而不是HTTPS)通过JavaScript AJAX调用传输一些敏感信息.
我想对数据进行加密,但JavaScript方面的加密意味着我公开了密钥,这使得对称加密只是默默无闻的安全措施.
JavaScript有任何非对称加密吗?这样,我可以保密服务器解密密钥.(我不担心Server> JavaScript消息的安全性,只关心某个JavaScript> Server消息的安全性)
javascript security encryption encryption-asymmetric public-key-encryption
我正在寻找一种文件加密/解密算法,它满足以下要求:
是否有建议算法的Ruby实现?
ruby encryption ruby-on-rails encryption-asymmetric public-key-encryption
我已经研究了一些关于如何实现我在问题中所说的内容并发现了几个API,但大多数API看起来非常复杂,因为我只是在这方面的一个noobie我只想要一个简单的方法,如:
public String Encrypt(String message, PublicKey publicKey)
Run Code Online (Sandbox Code Playgroud)
不知道是否可以这样做?如果没有那么请有人开导我另一种方式来实现这个:)
谢谢.
更新:
到目前为止,我只看到OpenPGP加密的所有库都需要公钥和私钥才能进行加密,而我只想用公钥加密(因为我没有私钥来使用它) !
我想使用公钥/私钥技术加密数据.我的意思是,用接收器的公钥加密,接收器可以用自己的私钥解密.
我怎样才能做到这一点?您有任何建议或示例代码吗?
c# encryption cryptography public-key-encryption private-key
在阅读https://superuser.com/a/230872/301446后,我已经能够设置ssh-agent的共享以进行公钥验证
由此生成的环境文件具有以下内容:
SSH_AUTH_SOCK=/tmp/ssh-OwqeSuxmEsQN/agent.4744; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8960; export SSH_AGENT_PID;
#echo Agent pid 8960;
Run Code Online (Sandbox Code Playgroud)
并agent.4744有:
!<socket >24194 s 07DF88C6-E9997283-4C471010-2FE57D77
Run Code Online (Sandbox Code Playgroud)
你知道ssh-agent如何使用这个套接字吗?我可以理解ssh-agent使用它来共享身份验证信息但具体如何?
encryption ×5
cryptography ×4
c# ×3
android ×1
git ×1
ios ×1
java ×1
javascript ×1
pgp ×1
private-key ×1
public-key ×1
ruby ×1
security ×1
sockets ×1
ssh ×1
ssh-agent ×1
swift ×1
tfs ×1
x509 ×1