"n": "rKZ-1zdz_CoLekSynOtyWv6cPSSkV28Kb9kZZHyYL-yhkKnH_bHl8OpWiGxQiKP0ulLRIaq1IhSMetkZ8FfXH-iptIDu4lPb8gt0HQYkjcy3HoaKRXBw2F8fJQO4jQ-ufR4l-E0HRqwLywzdtAImNWmju3A4kx8s0iSGHGSHyE4EUdh5WKt-NMtfUPfB5v9_2bC-w6wH7zAEsI5nscMXnvz1u8w7g2_agyhKSK0D9OkJ02w3I4xLMlrtKEv2naoBGerWckKcQ1kBYUh6WASPdvTqX4pcAJi7Tg6jwQXIP1aEq0JU8C0zE3d33kaMoCN3SenIxpRczRzUHpbZ-gk5PQ",
"e": "AQAB",
Run Code Online (Sandbox Code Playgroud)
如何从这些值生成公钥?最好通过 python 或 Linux 程序。如果由于值无效而导致问题毫无意义,我很抱歉。
源头就在这里。
在 C# 中,我可以创建一个RSA公钥/私钥对...
RSA rsa = RSA.Create();
byte[] priKey = rsa.ExportRSAPrivateKey();
byte[] pubKey = rsa.ExportRSAPublicKey();
Run Code Online (Sandbox Code Playgroud)
现在我想使用...有效地做同样的事情ECDsa
ECDsa ecdsa = ECDsa.Create();
byte[] priKey = ecdsa.ExportECPrivateKey();
...
Run Code Online (Sandbox Code Playgroud)
...但我似乎找不到允许导出公钥的方法?
我有一种情况,我需要让某些人可以从特定设备上读取一些数据,其中数据已预先加载到设备上,但我不能允许任何人创建自己的设备并使用他们自己的数据填充它相同的格式.
我知道这听起来有点疯狂,但有充分的理由!
我计划使用公钥加密,使用公钥加密数据,然后将私钥发布给想要读取数据的任何人.
但是,在查看RSACryptoServiceProvider及其工作原理后,看起来我不能只发布私钥,因为私钥可用于创建公钥.
有人可以证实这种怀疑,或者给我一些关于我如何能够做这项工作的提示!
非常感谢.
我需要用于RSA实现的开源代码(加密/解密和其他).谁能提出一些建议.
编辑:使用像opessl这样的开源库或者自己编写它是否很好(库也包含其他冗余的东西)
我有两个号码p,和q.我知道我可以得到phi = (p-1)*(q-1)那个ed = 1 (mod phi)......但我不确定这是什么意思.
我写了一些Python:
p = NUM
q = NUM
e = NUM
phi = (p-1)*(q-1)
d = (1 % phi)/float(e)
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个小数,并且d应该是一个整数.我究竟做错了什么?
编辑:我可能只是不了解RSA.现在,我正在看这个页面:http://www.di-mgt.com.au/rsa_alg.html
我设法得到一个Eulers Totient Function的版本,虽然它适用于较小的数字(这里较小的数字比我需要它计算的1024位数字更小)
我的版本在这里 -
public static BigInteger eulerTotientBigInt(BigInteger calculate) {
BigInteger count = new BigInteger("0");
for(BigInteger i = new BigInteger("1"); i.compareTo(calculate) < 0; i = i.add(BigInteger.ONE)) {
BigInteger check = GCD(calculate,i);
if(check.compareTo(BigInteger.ONE)==0) {//coprime
count = count.add(BigInteger.ONE);
}
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
虽然这适用于较小的数字,但它的工作原理是迭代从1到计算的数字.对于大型BigIntegers,这是完全不可行的.
我已经读过,每次迭代都可以划分数字,无需逐个查看.我只是不确定我应该用什么来划分(我在C中看到的一些例子是使用long和一个平方根 - 据我所知我无法准确准确地准确BigInteger的平方根.我也想知道如果对于像这样的模运算,函数是否需要包含一个说明mod是什么的参数.我完全不确定,所以任何建议都非常赞赏.
任何人都能指出我在正确的方向吗?
PS当我发现修改Euler Totient功能时,我删除了这个问题.我改编它与BigIntegers合作 -
public static BigInteger etfBig(BigInteger n) {
BigInteger result = n;
BigInteger i;
for(i = new BigInteger("2"); (i.multiply(i)).compareTo(n) <= 0; i = i.add(BigInteger.ONE)) {
if((n.mod(i)).compareTo(BigInteger.ZERO) == 0)
result = …Run Code Online (Sandbox Code Playgroud) java optimization cryptography public-key-encryption factorization
你好我有这个我在Javascript中设置的脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="jquery-1.7.2.min.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript" src="jsbn.js"></script>
<script language="JavaScript" type="text/javascript" src="rsa.js"></script>
<script language="JavaScript">
function encryptData(){
var pem ="-----BEGIN PUBLIC KEY-----\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+tii3IwzHa4i142kAB0dRVXoXA2Q8oF48UgMA\
AV54+JDED5iVyJK1s7J/xGi4U3+9sRoraE7bS19Nihs5DuYa0gsbKs/5jXOtKiw94fAtMyJTcX0d\
SzZhJKcX9vEzI27Hdu1rNFY64Ixz3KjrG1N/pXHtwjE1Ira5XZdTezx0wwIDAQAB\
-----END PUBLIC KEY-----";
var key = RSA.getPublicKey(pem);
var message = "some text to RSA encrypt";
var encryptedMessage = RSA.encrypt(message, key);
$('#RSAMessageEncrypted').html(encryptedMessage);
}
</script>
</head>
<body onload=encryptData();>
<form>
<strong>RSA encrypted Message :</strong> <textarea rows="10" cols="100" id="RSAMessageEncrypted"></textarea><br>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的文本区域中填充了使用上面的公钥在RSA中加密的消息.
加密的消息是:
oH1JVWIT7MOH4ObCjFlBuFcAUvooSZANMokFy5jApSi8n0ABVc9vwXP2EFl2x5+UColU6s2VAU+RsZPV4ZgZu3+GhN9pDUb1ZMVyYRECDy/7h+mE+UdDZTPwP1TAcBrspL/XM6+q6mJfUWbEKfR/2vyNUhBxpt6QOhVaI29aHfU=
Run Code Online (Sandbox Code Playgroud)
我的问题如下:如何使用此公钥派生自的私钥对解密我的邮件?有没有解密库?
我的私钥是:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC+tii3IwzHa4i142kAB0dRVXoXA2Q8oF48UgMAAV54+JDED5iVyJK1s7J/xGi4
U3+9sRoraE7bS19Nihs5DuYa0gsbKs/5jXOtKiw94fAtMyJTcX0dSzZhJKcX9vEzI27Hdu1rNFY6
4Ixz3KjrG1N/pXHtwjE1Ira5XZdTezx0wwIDAQABAoGBAJY4Gd4XZ6t1Epxi4oQ5N33jXGXgMAZp
M5FD8EUCzw1ujWlB96iT8qvZPdLSPMJkUwxyAfELGoI13n3POR46lBhRpYKkTZm1UmEBscdO2B9w …Run Code Online (Sandbox Code Playgroud) 我试图了解SSH授权方法是如何工作的,因为我正在尝试使用gitolite设置git服务器.
据我所知,gitolite将使用ssh授权用户并将其访问权限授予具有个人写入和读取权限的特定存储库.但我对授权如何运作感到困惑.
我在YouTube上观看了一些视频,他们使用一些颜色类比来解释.如果我理解正确,对于两个以秘密方式相互通信的人,他们需要一个秘密和公钥.
这两个人彼此了解公钥,并且彼此之间进行通信他们同意使用一个公钥.为了建立连接,他们使用相同的公钥加密它们的私钥,并将结果发送给彼此.当他们收到结果时,他们会将私钥添加到该消息中,就像魔术一样,他们会得到相同的消息.
但我不认为我理解这是正确的,因为我无法看到服务器将如何验证客户端.我知道服务器必须从连接到他的客户端持有公钥,但他还有一个私钥?
当客户端尝试连接到服务器时,他发送用他的公钥加密的私钥,服务器使用客户端公钥加密他的私钥并发送给客户端?
服务器如何检查用户是否真的是他?我还读到,为了解密用公钥加密的信息,只有持有私钥的人才能解密该消息.那么如果客户端没有客户端私钥,服务器如何解密客户端发送的消息呢?
如果有人能够解释我如何使用这个公钥和私钥进行身份验证,授权和信息交换,我会非常高兴.
您可以使用BigInteger.isProbablePrime()生成加密安全素数吗?他们"安全"需要什么确定性?
我尝试使用加密和解密数据System.Security.Cryptography.Pkcs,但是它仅适用于RSA证书,如果我使用ECC(曲线ECDH_brainpoolP512r1)证书,则构造函数会X509Certificate2崩溃,并带有Access DeniedException。
New-SelfSignedCertificate `
-Subject "CN=Test Code Signing RSA" `
-Type DocumentEncryptionCert `
-KeyUsage "DigitalSignature" `
-FriendlyName "Test Code Signing" `
-NotAfter (get-date).AddYears(5) `
-KeyExportPolicy Exportable `
-SmimeCapabilities `
-KeyAlgorithm ECDH_brainpoolP512r1
Run Code Online (Sandbox Code Playgroud)
var base64cert = "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";
new System.Security.Cryptography.X509Certificates.X509Certificate2(Convert.FromBase64String(base64cert), "qwert");
Run Code Online (Sandbox Code Playgroud)
Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: Access Denied
at Internal.Cryptography.Pal.CertificatePal.FilterPFXStore(Byte[] rawData, SafePasswordHandle password, PfxCertStoreFlags pfxCertStoreFlags)
at Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, …Run Code Online (Sandbox Code Playgroud) c# elliptic-curve x509certificate2 public-key-encryption pkcs#7
cryptography ×4
rsa ×4
c# ×2
encryption ×2
java ×2
python ×2
.net ×1
biginteger ×1
c ×1
c++ ×1
ecdsa ×1
javascript ×1
jwk ×1
openssh ×1
optimization ×1
pkcs#7 ×1
primes ×1
private-key ×1
security ×1
ssh ×1
unix ×1
vb.net ×1