如何生成33字节的压缩NIST P-256公钥?
我需要生成这样的公钥并进行字节的额外签名(其中包括此生成的以前的密钥) 我需要构建字节: ASN.1前缀 +签名(33字节压缩NIST P-256公共密钥) 签名应从其他定义的私钥 传递 ECDSA规格: ●曲线: nist P-256,也称为secp256r1和prime256v1(openssl) ●签名格式 ASN.1. ECDA签名的R和S值必须为正 整数,并因此编码. Android中是否有API进行此类过程?那我该如何使用? 我尝试了什么: try { val generator = KeyPairGenerator.getInstance("ECDSA") val ecSpec = ECNamedCurveTable .getParameterSpec("prime256v1") generator.initialize(ecSpec)
4 2024-02-05
编程技术问答社区
Android P上的ECDSA数字签名验证
import android.os.Bundle; import android.util.Base64; import android.widget.Toast; import org.bouncycastle.jce.provider.BouncyCastleProvider; // implementation 'org.bouncycastle:bcprov-jdk16:1.46' import java.security.KeyFactory; import java.security.PublicKey; import java.security.Security; import java.security.Signature; import java.security.spec.X509EncodedKeySpec; import androidx.appcompat.app.AppCompatActivity; public class MainActivity ext
16 2024-01-31
编程技术问答社区
如何使用spongy castle为比特币曲线(secp256k1)创建ECDSA密钥对(256bit)?
目前,我正在使用此方法创建按键 private KeyPair getKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException { KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDsA", "SC"); ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1"); keyGen.initialize(ecSpec, new SecureRandom()); return keyGen.generateKeyPair(); } KeyPairGenerator有另一种方法,在其中我可以指定按键,但我不确定如何通过Keyspecs? public void i
4 2024-01-31
编程技术问答社区
使用ECDSA的亚马逊AWS EC2服务器的SSH指纹验证?
当我创建新的Amazon EC2服务器时,我像往常一样使用ssh连接到它. 我看到了典型的警告: $ ssh myserver The authenticity of host 'ec2-12-34-567-890.compute-1.amazonaws.com (12.34.567.890)' can't be established. ECDSA key fingerprint is 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07. Are you sure you want to continue connecting (yes/no)? 在登录之前,我该如何验证指纹? 理想情况下,答案是基于原始创建控制台日志以外的东西 - 因为在系统重新启动后或在大型系统安装脚本中,该日志可能会被刷新,该脚本会生成大量输出,或者连接是与旧系统带有在创建时间未跟踪的钥匙. 解决方案 Amazon EC2控制
10 2024-01-25
编程技术问答社区
如何在.NET框架中读取ES512私钥
我正在尝试读取ES512专用密钥以在.NET Framework 4.7.2中创建JWT令牌,但是当我创建ECDSA对象时,它会引发验证异常. System.Security.Cryptography.CryptographicException: 'The specified key parameters are not valid. Q.X and Q.Y are required fields. Q.X, Q.Y must be the same length. If D is specified it must be the same length as Q.X and Q.Y for named curves or the same length as Order for explicit curves.' 这里有什么问题?我检查了互联网,找不到任何解决方案.在Net Core 3中,它正在使用ImporteCprivateKey方法,但我不知道如何在我需要的.NET
4 2024-01-08
编程技术问答社区
AuthenticatAsClient因CRYPT_E_ASN1_BADTAG而失败。
我编写了一个.NET应用程序,该应用程序试图使用ECC客户端证书进行相互认证(Curve是BrainPoolp384R1). 该证书由PKI签名,当我在ASN1查看器中查看该证书似乎是完全有效的. 我以下方式获得了证书字节数据: Console.WriteLine($"Certificate:{BitConverter.ToString(cert.RawData).Replace("-","")}"); 查看MMC控制台中的证书也似乎有效. 但是,当我尝试使用它作为客户端进行身份验证时,它会在CRYPT_E_ASN1_BADTAG中失败. 我尝试进行身份验证的代码刺: TcpClient client = new TcpClient(serverName, 9909); Console.WriteLine("Client connected."); SslStream sslStream = new SslStream( client.GetStrea
6 2024-01-06
编程技术问答社区
将基于ECC的证书从Windows证书库导入CngKey中
我如何从基于ECC的X509Certificate2的公共/私钥中获取CngKey>与ECDsaCng和ECDiffieHellmanCng? 一起使用 我目前正在使用RSA 2048位键对签名/加密内容.我是通过从X509Store中取出证书的情况来这样做,在该证书中,它们用标记为不可出现的私钥牢固存储.我想将当前的实现转换为使用ECDSA和ECDH,以便我可以使用较小的密钥尺寸进行等效安全性. 我已经成功地使用了OpenSSL生成了ECC证书: openssl ecparam -out private.pem -name prime256v1 -genkey openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer openssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx 我已经成功地
4 2024-01-03
编程技术问答社区
UWP ECDSP签名
我想使用此代码进行ECDSA签名: AsymmetricKeyAlgorithmProvider objAsymmAlgProv = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.EcdsaSha256); CryptographicKey keypair = objAsymmAlgProv.CreateKeyPairWithCurveName(EccCurveNames.SecP256r1); BinaryStringEncoding encoding = BinaryStringEncoding.Utf8; buffMsg = CryptographicBuffer.ConvertStringToBinary("Test Message", encoding); IBuffer buffSIG = CryptographicEngine.Sign(keypair, buffMsg);
4 2023-11-12
编程技术问答社区
使用Diffie Hellman密钥交换和椭圆曲线加密的Swift加密法
我一直在尝试使用Diffie Hellman密钥交换和椭圆曲线加密来对Swift进行加密和解密. 以下是我遵循的代码. 快速代码: let attributes: [String: Any] = [kSecAttrKeySizeInBits as String: 256, kSecAttrKeyType as String: kSecAttrKeyTypeEC, kSecPrivateKeyAttrs as String: [kSecAttrIsPermanent as String: false]] var error: Unmanaged? if #available(iOS 10.0, *) { **// Step 1: Generating the Public & Private Key
16 2023-10-09
编程技术问答社区
使用X509Certificate2签名和验证ECDSA-SHA256签名
我使用OpenSSL使用SHA256创建ECC证书.现在,我想使用这些证书签署数据并验证现有签名. 我尝试使用DSACryptoServiceProvider,但仅支持SHA1或MD5. ,但似乎ECDsaCng能够支持ECDSA-with-SHA256.我唯一的问题是我不知道如何将私钥和公共密钥从我的X509Certificate2转换为必要的CngKey.我读了另一个问题,有人描述了如何转换公钥.但是,为了能够签署数据,我也需要私钥. 因此,是否可以从X509Certificate2?中获取私人和公共密钥的CngKey证书以不同的格式可用.我将它们作为PFX文件,并单独用作CER和PEM文件. 我更喜欢坚持使用.NET Framework 4,但是如果根本无法使用它,我也会切换到Bouncy Castle. 解决方案 在.NET 4.6.1中添加了对此的支持: private static byte[] SignWithCert(X509Cert
4 2023-09-27
编程技术问答社区
关于向GitHub添加SSH密钥的问题
我有一个问题,该问题似乎是GitHub使用的SSH键的格式.我使用 git bash 生成一个新的ssh键: $ ssh-keygen -t rsa -C "youremail@youremail.com" 然后,我在GitHub帐户页面的设置中复制了SSH部分的键.但是,它带有问题通知如下: Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'. Check that you're copying the public half of the key 之后,我在最后从SSH-RSA和电子邮件地址开始编辑了SSH密钥.但是,问题仍然存在. 解决方案是什么? 解决方案 只需按照以下步骤即可立即设置SSH键: 生成一个新的S
6 2023-09-27
编程技术问答社区
"已知_ -hosts"文件中的ECDSA条目是什么?
我正在尝试从 ssh 用来验证主机的 nown_hosts 文件中提取ECDSA公钥.我在下面有一个例子. 这是我已知的_host文件中的" 127.0.0.1 ecdsa-sha2-nistp256"的条目: AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3QCzKPRluwunLRHaFVEZNGCPD/rT13yFjKiCesA1qoU3rEp9syhnJgTbaJgK70OjoT71fDGkwwcnCZuJQPFfo= 我通过base64解码器运行了它以得到: . 所以我假设这些问号是某种分离器(不,那是长度).我认为NISTP256是使用椭圆曲线,但是最后一个值到底是什么? 从我一直在阅读的内容中,ECDSA的公共密钥具有一对值x和y,这代表曲线上的一个点.有什么方法可以从那里提取x和y吗? 我正在尝试将其转换为Java公共密钥对象,但是我需要x和y才能这样做. 解决方案
10 2023-09-27
编程技术问答社区
如何正确使用ecdsa.sol模块?
我使用ECDSA库有此合同. import "./ECDSA.sol"; struct Signature { uint8 v; bytes32 r; bytes32 s; } function make(Signature memory sign) public returns(bool) 我尝试了解在这种情况下必须使用的参数.我看到的是元组类型值,但我无法弄清V,r,s的外观.我在哪里可以从我的地址获得这些值? 解决方案 v,r和s参数是用私钥签署消息的结果.签名具有65个字节,分为3个部分: 65字节阵列(以坚固性类型bytes的类型)排列以下方式:[[[V(1)],[R(32)],[S(32)]. 来源: openzeppelin 签名链链(因为您使用的是私钥). 请注意评论中的地址,我们稍后将在链上进行验证. const signature = await web3.eth.
28 2023-09-06
编程技术问答社区
无法验证Sol-Wallet-Adapter签署的消息
拥有创建了一个签名的消息我不确定如何使用结果签名使用publickey验证消息. 我的用例是,我想使用Solana钱包登录具有类似模式的API服务器: GET message: String (from API server) sign message with privateKey POST signature (to API server) verify signature with stored publicKey 我尝试使用nodejs crypto.verify在API侧解码签名的消息,但我的深度有点挖掘到缓冲液和椭圆曲线: // Front-end code const toHexString = (buffer: Buffer) => buffer.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), ""); const data = new TextEncode
24 2023-09-06
编程技术问答社区
用BouncyCastle在Java中验证ECDSA签名时出现错误
我已经测试了一种验证ECDSA签名的解决方案(我如何从EC public键字节中获取一个与给定数据完美的publicKey对象?). 这是数据: byte[] pubKey = DatatypeConverter.parseHexBinary("049a55ad1e210cd113457ccd3465b930c9e7ade5e760ef64b63142dad43a308ed08e2d85632e8ff0322d3c7fda14409eafdc4c5b8ee0882fe885c92e3789c36a7a"); byte[] message = DatatypeConverter.parseHexBinary("54686973206973206a75737420736f6d6520706f696e746c6573732064756d6d7920737472696e672e205468616e6b7320616e7977617920666f722074616b696e672074
26 2023-09-03
编程技术问答社区
用BouncyCastle验证ECDSA签名
我正在测试使用ECDSA,nist P251验证签名的Bouncycastle. (Xamarin的加密API尚未实施,我开始使用弹性城堡lib.) 无论如何,我面对以下代码面对的是... 方法B正在与C# API合作,方法A不是. 方法的EC点看起来有问题,但我无法检查细节. (我已检查,但无法解决.) 我应该如何更改A方法? 欢迎任何想法.提前感谢. using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Nist; using Org.BouncyCastle.Asn1.X9; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math; using Org.BouncyCastle.Math.EC; using Org.BouncyCastle.Security; using Org.BouncyCastle.Utili
18 2023-09-03
编程技术问答社区
ECDSA使用公共密钥和Java签名在C#中验证签名
我有一个在Java中生成的公共密钥和签名,我想使用ECDSACNG在C#中验证,使用该签名.公钥是MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExeg15CVOUcspdO0Pm27hPVx50thn0CGk3/3NLl08qcK+0U7cesOUUwxQetMgtUHrh0lNao5XRAAurhcBtZpo6w== 我将其转换为C#ecdsacng可以使用的键,并使用最后64个字节并准备0x45、0x43、0x53、0x31,... 使用SHA256在Java中生成签名.有趣的是,如果我在此处使用该工具测试签名, httpps://kjur. github.io/jsrsasign/sample/sample-ecdsa.html ,它说它是一个有效的签名. 我一直在搜寻网,但仍然没有快乐. 代码如下 static void VerifySignature() { var publicKey = "MFkwEwYHKoZIzj0
6 2023-09-03
编程技术问答社区
C# ECDsaCng.SignData在OpenSSL中使用签名?
我需要知道什么编码 ECDsaCng.SignData Method (Byte[]) 默认情况下正在使用它的字节数组,以及如何将其转换为 接受的der格式 ,我可以使用方法ECDSA_do_verify. 我知道它的sha1,我知道如何加载该消化,我只是不知道字节编码是ECDsaCng.SignData方法的内容,也不知道如何将其转换为der格式,如果我什至需要这样做. 解决方案 ECDSA签名是Value-pair (r, s). Windows CNG将其作为两个值的串联发出,并且由于.NET不会重新解释数据,因此这是事实上.NET格式. (r是阵列的前半部分,s是下半部分) openssl期望序列的编码结构(整数(r),整数(s)).这个松散的意思是{ 0x30, payload_length, 0x02, r_length, r_bytes[0]...r_bytes[r_length-1], 0x02, s_length, s_bytes[
8 2023-09-03
编程技术问答社区
如何在C#中使用SHA256与ECDSA算法创建一个数字签名
我需要创建一个签名,该签名是消息的URL-SAFE-BASE-BASE-64编码SHA256+ECDSA签名的签名. 这将用于消耗远程休息服务. 我已经获得了HAL浏览器实现,该实现是按预期连接到它们的,并在Scala中完成了测试实现. val token = generateToken() // Generates a random numeric token, different for each request val lines = line1 + "\n" + line2 + "\n" + line3 + "\n" val lineBytes = lines.getBytes() try { var sig = Signature.getInstance("SHA256withECDSA") sig.initSign(privateKey) sig.update(lineBytes)
6 2023-09-03
编程技术问答社区
签名验证过程中出现Java异常(签名字节解码错误)。
我必须验证证书.我不是密码学专家,所以可能我做了一些(或一切:))错误. 当代码达到最后一步(boolean b = sig.verify(CertSign);)时,它会触发一个例外: java.security.signature exception:错误解码签名字节. 有人可以帮我找出我在做什么错吗? 以下是显示问题的测试代码: private void test() { byte [] CertBody = new byte[]{(byte)0x7F,(byte)0x4E,(byte)0x81,(byte)0x82, (byte)0x5F,(byte)0x29,(byte)0x01,(byte)0x00, (byte)0x42,(byte)0x08,(byte)0xFB,(byte)0x55,
58 2023-09-03
编程技术问答社区