有没有办法以编程方式测试ssh是否可以使用公钥进行身份验证?我想做这样的事情(最好是在bash,但我对python解决方案开放):
ssh-test-thingy user@host || echo "could not authenticate using publickey"
Run Code Online (Sandbox Code Playgroud)
其中ssh-test-thingy返回非零退出状态,如果在远程主机上不公钥匹配.
我试图在我的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) 我正在使用PHP的openssl_public_encrypt()来使用RSA加密数据.但它不会加密大于特定大小的数据.
如何让它加密任意长度的数据?
在加密中,我只看到Signer/Verifier用于进行数字签名和密码/解密用对称密钥加密.
如何使用公钥加密数据?
我使用的是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",然后再次解密这个字符串.
我该怎么做?
谢谢
我需要使用公钥加密100KB文件.我一直在阅读一些帖子声称这是不实际的使用公共密钥加密直接大文件,而首选的方法是使用对称密钥的文件加密和加密,然后使用公钥此对称密钥.似乎一个天真的解决方案是将大文件分解成碎片并使用相同的公钥加密它们中的每一个.我的问题是这个解决方案是否以及为何错误?
我有一个嵌入到二进制文件中的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.)
我想为 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)
将 …
为了与 Apple 实现 OAuth,我们调用GET https://appleid.apple.com/auth/keys.
结果如下:
{
"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
当我从 Azure AD 使用 Python 收到 JWK 时,我想对其进行验证和解码。但是,我不断收到错误“签名验证失败”。
我有以下设置:
使用 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