标签: public-key-encryption

用于公钥认证的bash/ssh测试

有没有办法以编程方式测试ssh是否可以使用公钥进行身份验证?我想做这样的事情(最好是在bash,但我对python解决方案开放):

ssh-test-thingy user@host || echo "could not authenticate using publickey"
Run Code Online (Sandbox Code Playgroud)

其中ssh-test-thingy返回非零退出状态,如果在远程主机上不公钥匹配.

ssh bash public-key-encryption

12
推荐指数
1
解决办法
4791
查看次数

Android解密错误

我试图在我的Android应用程序中加密和解密字符串但我不断收到InvalidKeyException错误.

这是我的代码:

//生成密钥方法

public void generateKeys() {
    Calendar cal = Calendar.getInstance();
    Date now = cal.getTime();
    cal.add(Calendar.YEAR, 25);
    Date end = cal.getTime();

    KeyPairGenerator kpg = null;
    try {
        kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    }
    try {
        kpg.initialize(new KeyPairGeneratorSpec.Builder(context)
                .setAlias(KEY_ALIAS)
                .setStartDate(now)
                .setEndDate(end)
                .setSerialNumber(BigInteger.valueOf(1))
                .setSubject(new X500Principal("CN=" + KEY_ALIAS))
                .build());
    } catch (InvalidAlgorithmParameterException e) {
        e.printStackTrace();
    }

    KeyPair kp = kpg.generateKeyPair();

    KeyStore ks = null;
    try {
        ks = KeyStore.getInstance("AndroidKeyStore");
        ks.load(null);
        Enumeration<String> aliases …
Run Code Online (Sandbox Code Playgroud)

java encryption android public-key-encryption private-key

12
推荐指数
3
解决办法
3455
查看次数

如何在PHP中加密长字符串?

我正在使用PHP的openssl_public_encrypt()来使用RSA加密数据.但它不会加密大于特定大小的数据.

如何让它加密任意长度的数据?

php rsa public-key-encryption

11
推荐指数
2
解决办法
9368
查看次数

如何使用NodeJS中的公钥加密数据?

在加密中,我只看到Signer/Verifier用于进行数字签名和密码/解密用对称密钥加密.

如何使用公钥加密数据?

encryption public-key-encryption node.js

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

使用RSA和DES3密钥加密和解密一串文本

我使用的是Linux命令行,我使用以下命令创建了一个私钥:

openssl genrsa -des3 -out private.pem 2048
Run Code Online (Sandbox Code Playgroud)

我从私钥中提取了公钥,如下所示:

openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)

我想使用公钥来加密一串文本,让我们说"foo bar",然后再次解密这个字符串.

我该怎么做?

谢谢

linux public-key-encryption

11
推荐指数
1
解决办法
9950
查看次数

使用公钥加密大文件

我需要使用公钥加密100KB文件.我一直在阅读一些帖子声称这是不实际的使用公共密钥加密直接大文件,而首选的方法是使用对称密钥的文件加密和加密,然后使用公钥此对称密钥.似乎一个天真的解决方案是将大文件分解成碎片并使用相同的公钥加密它们中的每一个.我的问题是这个解决方案是否以及为何错误?

encryption-asymmetric public-key-encryption

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

如何将原始模数和指数转换为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
查看次数