在C#中,我能够通过以下任一方式对公钥进行哈希验证:
// Import from raw modulus and exponent
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
RSAParameters rsaKeyInfo = new RSAParameters {Modulus = modulus, Exponent = exponent};
rsa.ImportParameters(rsaKeyInfo);
return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}
// Import from XML
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
rsa.FromXmlString(xmlPublicKey);
return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}
Run Code Online (Sandbox Code Playgroud)
我需要知道的是,在给定入站RSA公钥的情况下,如何使用CAPI完成同样的事情?
除了了解如何将公钥导入加密提供程序的上下文之外,我还有大多数验证哈希所需的CAPI函数:
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);
CryptCreateHash(hCryptProv, CALG_SHA512, 0, 0, &hHash);
CryptHashData(hHash, pDataToHash, lenDataToHash, 0);
CryptVerifySignature(hHash, pSignature, sigLength, NULL, CRYPT_NOHASHOID);
CryptDestroyHash(hHash);
CryptReleaseContext(hCryptProv, 0);
Run Code Online (Sandbox Code Playgroud)
谢谢!
这个的后续。
我得到了阅读/解码工作
1> {ok, F} = file:read_file("inaimathi.rsapub").
{ok,<<"-----BEGIN RSA PUBLIC KEY-----\nmQINBE9NBIQBEADMSzN6b0FaPP0rGiLDWKfH4ehN66Z0SAIynXm6lBHjmO69pNsm\niIe4p1X9aXhr"...>>}
2> [Entry] = public_key:pem_decode(F).
[{'RSAPublicKey',<<153,2,13,4,79,77,4,132,1,16,0,204,75,
51,122,111,65,90,60,253,43,26,34,195,
88,167,...>>,
not_encrypted}]
Run Code Online (Sandbox Code Playgroud)
根据文档,为了从中获取可用的公钥,我必须做的最后一件事就是在其public_key:pem_entry_decode/1上运行Entry。但是,当我尝试这样做时,会出现错误。
3> public_key:pem_entry_decode(Entry).
** exception error: no match of right hand side value
{error,
{asn1,
{{badmatch,{error,{asn1,{wrong_tag,{131097,16}}}}},
[{'OTP-PUB-KEY',dec_RSAPublicKey,2,
[{file,"OTP-PUB-KEY.erl"},{line,5956}]},
{'OTP-PUB-KEY',decode,2,
[{file,"OTP-PUB-KEY.erl"},{line,493}]},
{public_key,der_decode,2,
[{file,"public_key.erl"},{line,166}]},
{erl_eval,do_apply,6,
[{file,"erl_eval.erl"},{line,576}]},
{shell,exprs,7,[{file,"shell.erl"},{line,668}]},
{shell,eval_exprs,7,
[{file,"shell.erl"},{line,623}]},
{shell,eval_loop,3,
[{file,"shell.erl"},{line,608}]}]}}}
in function public_key:der_decode/2 (public_key.erl, line 170)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
编辑:不认为这很重要,但有人问,所以。
我在酷睿i3运行Debian喘息从的〜2日龄结账安装二郎此。
erl --version 说
Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Run Code Online (Sandbox Code Playgroud) 我试图将我的代码推送到我的github帐户,但无论何时我尝试,我都会得到这个
Pushing to git@github.com:AlphaModder/Space-Dimension-Mod.git
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
问题:如何避免"权限被拒绝"?GitHub远程地址是否有效?
我有一段简单的 JavaScript:
<html>
<script type="text/javascript" src="http://cdn.rawgit.com/travist/jsencrypt/v2.1.0/bin/jsencrypt.js"></script>
<script type="text/javascript">
var message = "This is my message"
// we create a new JSEncrypt object for rsa encryption
var rsaEncrypt = new JSEncrypt();
var publicKey = "-----BEGIN PUBLIC KEY-----" +
"\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQK" +
"BgQCQDxDFOYJpkCaqeX4CBVNCtBjX\nMZgGMo" +
"lSs2wYrVu1ixr36KpeJcRcYhz+AnyhnUpYkgk" +
"+hEqJtDSNirU5Dk5oVYYi\ngf2uLogV5Tp/ka" +
"K49r9vtxldcHraZIgNQjcdeQUd/viKd/3DvM8" +
"naWR/mTG0nCBE\nrEQkATW/xXynJh/COQIDAQ" +
"AB\n-----END PUBLIC KEY-----"
rsaEncrypt.setPublicKey(publicKey);
var encryptedMessage = rsaEncrypt.encrypt(message);
console.log(encryptedMessage)
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
我觉得每次运行时都应该在控制台中产生相同的输出,但事实并非如此。
示例输出:
abqE+YkCMKFWgsazbZpfGvoXLci9FL/wZLYUMR6ZFkolsvJC5MdJgq5yn+AXXy8xlKHDOry6czAaOQOTl2HXdKSfsypc8nqDU8Sx5PuEgMYjvJ/dEyfU6jVuxfH1Qmuk6aOGVHePNfDlC4kSjgp1RXToSP5NqAEi24EuMx3uulI=
OzZM03Pki3o631KOuZ5nyQKu1xXRbLHhrR0WnjE5Ns5SssoiCEwlrS+svtP0cbZaYWZJc+FlZQNFUam4iC233BKnY5Nrr5Ppj14eaBvJ4x3FR8FiLwtyEW7nTzisAS7Ys2RKPjUzmkiOCZHwIpXnUO10KVo8763+JIuDB0cDPS4=
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
我已经成功创建了私钥和公钥,并对消息进行了编码,但是在解码消息时,我抛出了错误
到目前为止,我的代码是:
require 'openssl'
require 'base64'
key = OpenSSL::PKey::RSA.generate(2048)
pri_key = key
pub_key = key.public_key
string = 'Hello World!';
rsa_public_key = OpenSSL::PKey::RSA.new(pub_key)
encrypted_string = Base64.encode64(rsa_public_key.public_encrypt(string))
puts "Encrypted Message:"
puts encrypted_string
# This creates an error
my_string = pri_key.private_decrypt(encrypted_string)
puts "The decoded message"
puts my_string
Run Code Online (Sandbox Code Playgroud)
打印编码后的消息后抛出此错误
Example Decrypt.txt:25:in `private_decrypt': data greater than mod len (OpenSSL::PKey::RSAError)
from Example Decrypt.txt:25:in `<main>'
Run Code Online (Sandbox Code Playgroud) 我需要像这样转换以太坊地址
0xB34080739D5B656D76089f9f21b374BA5dafA373
像这样的公钥
e2d3a3a43e71eb541e12504cee22ed74024969b46b9e68ea7f9e5384fe96fc04
我是这样得到地址的
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://sokol.poa.network'))
addr = w3.toHex(w3.sha3(text=public_key)[12:])
Run Code Online (Sandbox Code Playgroud)
也许有一个图书馆可以做到这一点?请帮忙
我有两个带有私钥的服务器(实例),我想更改这些密钥而不停止服务器(实例)或创建新的密钥。
这可能吗?
amazon-ec2 amazon-web-services public-key key-pair private-key
public-key ×7
rsa ×3
encryption ×2
private-key ×2
amazon-ec2 ×1
cryptoapi ×1
cryptography ×1
erlang ×1
ethereum ×1
git ×1
github ×1
gnupg ×1
javascript ×1
key-pair ×1
mscapi ×1
push ×1
python ×1
ruby ×1