标签: public-key-encryption

如何将原始模数和指数转换为RSA公钥(.pem格式)

我有一个嵌入到二进制文件中的RSA公钥的模数和指数,我试图提取整个blob并创建一个可用的.pem公钥.

目前,我正在提取完整的260个字节(指数为4个字节,模数为256个字节),编码为base64.我使用以下shell命令执行此操作:

tail -c $((filesize - start_of_key_data)) filename | head -c $size_of_key_data | base64 > outkey
Run Code Online (Sandbox Code Playgroud)

这给了我以下字符串:

<<<<<< modulus & exponent extracted from binary file, base64-encoded >>>>>>

tZyrQA6cZFJfVm6FyXwtZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4F
vzmnZXzZU71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDvYDT+
sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGya9nsNIfNBBIf1Lll
RWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx41YjeEW/warweoDVG7zaxrHEc/k/r
ZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/ZwABAAE=
Run Code Online (Sandbox Code Playgroud)

现在,当我拿出key.pem密钥对时,模数和指数最初是从中提取的,并显示公共部分,如此

openssl rsa -in key.pem -pubout -out pubkey.pem
Run Code Online (Sandbox Code Playgroud)

我得到这个字符串(我省略了页眉和页脚行:

<<<<<<<<< valid public key data extracted from keypair >>>>>>>>>

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZyrQA6cZFJfVm6FyXwt
ZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4FvzmnZXzZ
U71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDv
YDT+sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGy
a9nsNIfNBBIf1LllRWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx4
1YjeEW/warweoDVG7zaxrHEc/k/rZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/
ZwIDAQAB
Run Code Online (Sandbox Code Playgroud)

您可以看到我自己提取的base64编码的关键数据实际上存在于使用openssl从key.pem中提取的有效公钥数据的数据中.但是一开始有45个字符,我自己提取的数据没有 -

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
Run Code Online (Sandbox Code Playgroud)

最后8个字符也不同.

ZwIDAQAB
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一些关于如何将模数和指数转换为可用公钥的建议吗?

(目标是在bash脚本中执行此操作,而不是像我见过许多建议的那样使用python或C.)

bash rsa public-key-encryption

10
推荐指数
1
解决办法
2万
查看次数

传递给 GIT_SSH_COMMAND 的参数“-i”被忽略

我想为 git 使用其他 IdentityFile。我想动态使用它,而不是通过配置。我这样做:

  $ GIT_SSH_COMMAND='ssh -i /home/my_user/.ssh/id_ed25519' git pull origin master
  repository access denied.
  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)

pub 密钥“id_ed25519.pub”在我的 bitbucket 中。

这也失败了:

  $ git pull origin master
  repository access denied.
  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)

和:

$ git remote -v
origin  git@bitbucket.org:company123/repo456.git (fetch)
origin  git@bitbucket.org:company123/repo456.git (push)
Run Code Online (Sandbox Code Playgroud)

将 …

git ssh public-key-encryption

10
推荐指数
2
解决办法
9886
查看次数

我可以存储 Apple 的公钥以验证令牌签名吗?

为了与 Apple 实现 OAuth,我们调用GET https://appleid.apple.com/auth/keys.

(根据https://docs.developer.pv.apple.com/documentation/signinwithapplerestapi/fetch_apple_s_public_key_for_verifying_token_signature 中的文档)

结果如下:

{
    "kty": "RSA",
    "kid": "1234567890",
    "use": "...",
    "alg": "RS256",
    "n": "...",
    "e": "..."
}
Run Code Online (Sandbox Code Playgroud)

我可以相信这些信息不会在没有通知的情况下更改吗?或者每次我们需要使用 Apple 的公钥时我都应该提出这个请求吗?

oauth public-key-encryption ios apple-sign-in sign-in-with-apple

10
推荐指数
1
解决办法
1503
查看次数

如何验证Azure Ad生成的JWT?

问题

当我从 Azure AD 使用 Python 收到 JWK 时,我想对其进行验证和解码。但是,我不断收到错误“签名验证失败”。

我的设置

我有以下设置:

  1. Azure 设置
    在 Azure 中,我创建了一个应用程序注册,设置为“仅限个人 Microsoft 帐户”。
  2. Python 设置
    在 Python 中,我使用 MSAL 包来接收令牌。我使用来自 Azure 的公钥来验证令牌。

代码

使用 Azure 门户中的凭据,我设置了一个用于获取令牌的客户端。

import msal
ad_auth_client = msal.ConfidentialClientApplication(
    client_id = client_id,
    client_credential = client_secret,
    authority = "https://login.microsoftonline.com/consumers"
)
my_token = ad_auth_client.acquire_token_for_client(scopes=['https://graph.microsoft.com/.default'])
Run Code Online (Sandbox Code Playgroud)

如果我将令牌放入https://jwt.io/这样的网站,一切看起来都很好。接下来,我需要来自 Azure 的公钥来验证令牌。

import requests
response = requests.get("https://login.microsoftonline.com/common/discovery/keys")
keys = response.json()['keys']
Run Code Online (Sandbox Code Playgroud)

为了将公钥与令牌相匹配,我在令牌标头中使用“kid”。我还知道使用哪种算法进行加密。

import jwt
token_headers = jwt.get_unverified_header(my_token['access_token'])
token_alg = token_headers['alg']
token_kid = token_headers['kid']
public_key = None
for key in …
Run Code Online (Sandbox Code Playgroud)

python decode public-key-encryption jwt azure-active-directory

10
推荐指数
1
解决办法
6700
查看次数

如何使用Synapse建立安全连接?

我正在测试Synapse并想知道如何建立安全连接.我注意到它支持SSL,但我不确定它是否适合我的需求.我没有CA的证书.我只想加密我的服务器程序和客户端程序之间的所有数据.当然,我可以在发送之前自己加密数据.但是如果SSL可以加密数据,也许我可以使用它.据我所知,SSL用于"加密"和"身份验证".我需要的只是"加密".Synapse有可能吗?

更新:

感谢daemon_x和Synapse的作者Lukas Gebauer的帮助,我想我终于让它发挥了作用.这是我做的:

服务器端:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)接受连接后,为新创建的套接字添加以下代码行.

fclient.SSLAcceptConnection;
Run Code Online (Sandbox Code Playgroud)

客户方:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)连接到服务器后,添加以下行.

fclient.SSLDoConnect;
Run Code Online (Sandbox Code Playgroud)

如果没有发生错误,则连接现在是安全的.但是当您运行代码时,如Synapse文档中所述,您可能会注意到SSLAcceptConnection需要一些时间才能返回.因此,如果您想加快速度,最好先预先创建证书文件和私钥文件.并在SSLAcceptConnection之前添加以下代码

  fclient.SSL.CertificateFile := 'bs-cert';
  fclient.SSL.PrivateKeyFile := 'bs-privatekey';
Run Code Online (Sandbox Code Playgroud)

如果您没有证书和私钥,请参阅ssl_openssl中的"CreateSelfSignedCert"以获取自签名证书和私钥.您可以通过WriteStrToStream将FCertificate和FPrivatekey保存到文件中,稍后再使用它们.

delphi ssl apache-synapse public-key-encryption

9
推荐指数
1
解决办法
5898
查看次数

RSA计算d

不确定这是否是提出加密问题的正确位置,但是这里是.

我想在RSA中找出"d",我已经计算出p,q,e,n和øn;

p = 79, q = 113, e = 2621

n = pq                   ø(n) = (p-1)(q-1)
n = 79 x 113 = 8927      ø(n) = 78 x 112 = 8736

e = 2621
d = ???
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到d,我知道d应该是一个值... edmodø(n)= 1.任何帮助将不胜感激

编辑:一个例子是e = 17,d = 2753,øn= 3120

17*2753 mod 3120 = 1

encryption cryptography rsa public-key-encryption

9
推荐指数
1
解决办法
3万
查看次数

如何在数据库中安全地存储社会安全号码?

我正在开发一个网络应用程序,用户需要提交他们的社会安全号码。

我想使用非对称密钥进行加密,这样即使网络服务器遭到破坏,私钥仍然是安全的。该应用程序不会在网络服务器上处理。

但是,应用程序需要能够知道 SSN 是否重复,A 不允许重复,B 允许用户返回其应用程序。

这可以做到吗?

使用类似于密码存储方式的单向哈希是否有意义,或者会损害数据吗?

因为只有大约。100 亿个 SSN。这是否会产生任何哈希算法。容易受到暴力攻击。盐在这里有用吗?如果盐是已知的,是不是仍然容易受到暴力破解的影响?是否可以正确隐藏盐,因为如果有人可以访问数据库,他们也可以访问盐?

mysql encryption-asymmetric public-key-encryption

9
推荐指数
1
解决办法
1万
查看次数

从字符串创建X509Certificate2时"无法找到请求的对象"异常

我想X509Certificate2从字符串创建.让我举个例子:

string keyBase64String = Convert.ToBase64String(file.PKCS7);
var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String));
Run Code Online (Sandbox Code Playgroud)

keyBase64String有这样的内容:"MIIF0QYJKoZI ........hvcNAQcCoIIFwjCCBb4CA0="

并且file.PKCS7我从数据库下载的字节数组.

创建时我遇到以下异常X509Certificate2:

找不到请求的对象

并且堆栈跟踪:

"无法在系统中的System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte [] rawData)处的System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32hr)中找不到请求的对象"X509Certificate2异常"无法找到请求的对象"}. WebApp.SoupController.d__7.MoveNext()上的System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)中的Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData,Object password,X509KeyStorageFlags keyStorageFlags)在D:\ Projects\WebApp\Controllers\SoupController.cs中:第118行

请告诉我我做错了什么.任何帮助将不胜感激!

c# encryption x509certificate2 public-key-encryption

9
推荐指数
1
解决办法
1万
查看次数

Go的openpgp包中的PGP密钥装甲编码

我正在尝试使用Go的openpgp/armor包以ASCII装甲编码打印PGP公钥.

我期望的输出:

-----BEGIN PGP PUBLIC KEY BLOCK-----

<base64 encoded bytes of public key>
<checksum>
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

-----BEGIN PGP PUBLIC KEY BLOCK-----

<first part of base64 encoded bytes of public key>
Run Code Online (Sandbox Code Playgroud)

它只打印公钥的第一部分.

公钥是从本地密钥环文件获取的,并按如下方式处理:

keyRingFileBuffer, err := os.Open(keyRingFilePath)
if err != nil {
    log.Fatal(err)
}
defer keyRingFileBuffer.Close()

keyRing,err := openpgp.ReadKeyRing(keyRingFileBuffer)
if err != nil {
    log.Fatal(err)
}

for _, k := range keyRing {
    w, _ := armor.Encode(os.Stdout, openpgp.PublicKeyType, nil)
    k.PrimaryKey.Serialize(w)
}
Run Code Online (Sandbox Code Playgroud)

我不正确地使用包裹吗?关于如何跟踪这个(在我看来)错误输出的原因的任何想法?

gnupg pgp go openpgp public-key-encryption

9
推荐指数
1
解决办法
405
查看次数

如何生成私钥/公钥对来加密消息

我需要在我的颤振应用程序中生成一个密钥对,但似乎没有任何库可以这样做。有一个名为RSA 的库,它可以解析一对公钥/私钥,并能够使用它们加密和解密字符串,但它不能生成新的 KeyPair(最好从给定的字符串)。

我如何首先生成密钥?我错过了什么吗?

android cryptography public-key-encryption dart flutter

9
推荐指数
2
解决办法
1万
查看次数