标签: rsa

RSA 中的消息长度限制

在 RSA 中,消息长度不应超过 (keysize/8) 字节。为什么会有这样的限制呢?输入(例如“abcde”)在输入 RSA 算法之前转换成什么?它在哪里考虑输入字符串“abcde”的大小?

ssl rsa

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

C# 从 RSA PEM 私钥中提取公钥

我有一个 PEM 格式的私钥。如何从中提取公钥。我需要能够以实用的方式在代码中执行此操作,而无需执行进程(使用 openssl)。

未使用的私钥示例:

-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我看过很多其他 SO 文章,但它们并不是我所需要的。 c# RSA 从私钥中提取公钥 使用 RSA 私钥生成公钥? C# RSA 公钥输出不正确

c# rsa pem .net-standard-2.0

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

使用 Apps 脚本生成公钥/私钥 RSA

我想使用 Google 的 Apps Script 服务创建一个公钥/私钥 RSA。我找到了文档,但没有看到类似“生成密钥”或类似在 c# 中使用RSACryptoServiceProvider何时可以创建密钥并将其导出到 XML。

我看看这个文档https://developers.google.com/apps-script/reference/utilities/

var signature = Utilities.computeRsaSha256Signature("this is my input",
    "-----BEGIN PRIVATE KEY-----\nprivatekeyhere\n-----END PRIVATE KEY-----\n");
Run Code Online (Sandbox Code Playgroud)

如何生成我的“KEY” 正确的方法是什么?

为了澄清我的要求,在 c# 中我们可以这样做。

using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(keySize))
      {
        privateKey = RSA.ToXmlString(true);
      }
Run Code Online (Sandbox Code Playgroud)

这将生成一个私钥运行时,我尝试用 Apps 脚本做同样的事情,这可能吗?

编辑部分

事实上,我已经有了一个可以生成 RSA 密钥的 javascript 类,但是在 .Gs 代码文件中运行它需要很长时间。我的 Javascript 代码在浏览器中运行良好,但是当它运行到 .gs 文件时......它看起来非常慢

我正在寻找来自 Google 的“本机”服务来完成它..

javascript rsa google-apps-script

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

将两个公钥与 OpenSSL API 进行比较

我正在寻找一种使用 C++ 中的 OpenSSL API 来比较两个公钥的方法。当然,最明显的方法是将两个键序列化为某种格式,如 PEM 或 DER,然后只比较两个序列化的缓冲区。

但我想知道是否有更有效的方法来比较直接使用内存中的 OpenSSL 密钥结构的两个密钥。显然,这样做可能需要不同的逻辑,具体取决于用于生成公钥(及其私钥)的算法。

因此,从一些简单的开始,假设我们最初只关心比较 RSA 密钥。由于RSA 密钥公共部分是模数n和公共指数e,因此我们似乎可以尝试从每个密钥中获取这两个数字并直接比较它们。如果它们相等,我们可以说两个公钥相等。

OpenSSL的API提供的函数来获得这些值,RSA_get0_key,它返回指针指向内部BIGNUM的对象ne以及d,存储在所述RSA结构体。然后我们可以BN_cmp直接比较这些对象。因此,C++ 代码将类似于:

bool compare_pubkeys(const EVP_PKEY* k1, const EVP_PKEY* k2)
{
    // make sure both keys are the same type
    const int tp1 = EVP_PKEY_type(k1->type);
    const int tp2 = EVP_PKEY_type(k2->type);
    if (tp1 != tp2) return false;

    if (tp1 == EVP_PKEY_RSA) {
        RSA* rsa1 …
Run Code Online (Sandbox Code Playgroud)

c++ openssl rsa

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

java.security.InvalidKeyException:从 PEM 文件生成公钥、私钥时密钥格式无效

我经历了许多类似的话题,但没有运气!!

我想使用 PEM 文件生成公钥和私钥。以下是我使用的代码:

        String pemFileNme = "C:\\Users\\amitmm\\Desktop\\clean\\key.pem";

        File pubKeyFile = new File(pemFileNme);
        File privKeyFile = new File(pemFileNme);

        // read public key DER file
        DataInputStream dis = new DataInputStream(new 
        FileInputStream(pubKeyFile));
        byte[] pubKeyBytes = new byte[(int)pubKeyFile.length()];
        dis.readFully(pubKeyBytes);
        dis.close();

        // read private key DER file
        dis = new DataInputStream(new FileInputStream(privKeyFile));
        byte[] privKeyBytes = new byte[(int)privKeyFile.length()];
        dis.read(privKeyBytes);
        dis.close();

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");

        // decode public key
        X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubKeyBytes);
        RSAPublicKey pubKey = (RSAPublicKey) 
        keyFactory.generatePublic(pubSpec);

        // decode private key
        PKCS8EncodedKeySpec privSpec = …
Run Code Online (Sandbox Code Playgroud)

java sha1 rsa public-key-encryption pem

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

Java 和 JavaScript 之间使用 OAEP 的 RSA 加密

我试图用 JavaScript 加密一个短字符串并用 Java 解密它。解密失败,我认为这是因为两个平台之间的块模式和/或填充不同。我尝试在Java和JavaScript中加密相同的字符串,得到不同的结果,这表明确实存在差异。这是创建密钥的 Java 代码:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

这是我用来测试加密的 Java 代码:

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] bytes = cipher.doFinal("asdf".getBytes());
Run Code Online (Sandbox Code Playgroud)

我将公钥发送到 JavaScript 进程,并将其转换为 ArrayBuffer,变量名为publicKey。我已经验证了 JavaScript 端的密钥与 Java 端的密钥匹配(通过导出它crypto.subtle.exportKey并检查字节)。这是我用来测试加密的 JavaScript 代码:

crypto.subtle.importKey('spki', publicKey,
                        {hash: 'SHA-256', name: 'RSA-OAEP'}, true,
                        ['encrypt'])
      .then((key) => {
        crypto.subtle.encrypt({name: 'RSA-OAEP'}, key,
                              new TextEncoder().encode('asdf'))
              .then((buffer) => {

              });
      });
Run Code Online (Sandbox Code Playgroud)

Java 中的字节数组和 JavaScript 中的数组缓冲区的内容是不一样的。我不确定的设置是Cipher#getInstanceJava 端的参数importKeyencryptJavaScript 端的参数。是否有任何设置可以使用内置类在 Java 和 JavaScript 之间工作?或者我应该查看第三方库(例如,Bouncy …

javascript java encryption rsa

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

我如何解决 TypeError: pow() 需要 2 个参数(给出 3 个)?

我做了一个可以解决RSA数学题的小程序。程序的一部分检查是否需要密文,以及是否给出明文,e 和 n。

执行代码时,我收到一个错误:TypeError: pow() 需要 2 个参数(给定 3 个)即使 pow() 可以接受 3 个参数https://www.programiz.com/python-programming/methods/built-in /战俘

if "ciphertext" in NeededObjDict and "plaintext" in GivenObjDict and "e" in GivenObjDict and "n" in GivenObjDict:
        OutputCiphertext = str(pow(GivenPlaintext, GivenE, GivenN))
        print('ciphertext = ',OutputCiphertext)
Run Code Online (Sandbox Code Playgroud)

python rsa

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

使用来自“jwks_uri”端点的值验证从 azure ad b2c 收到的令牌

我从公用事业服务获取 azure 广告访问令牌,我想使用一些标准令牌验证参数来验证它,其中包括发行者、受众和发行者签名密钥。现在我有发行者和受众,但我没有发行者签名钥匙。

但是我已经使用 azure ad b2c 的 jwks_uri 端点提取了关键信息,它给了我一个 json 输出

{
  "keys": [
    {
      "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4......",
      "nbf": 1493763266,
      "use": "sig",
      "kty": "RSA",
      "e": "AQAB",
      "n": "tVKUtcx_n9rt5afY_2WFNvU6PlFMggCatsZ3l4RjKxH0jgdLq6CScb0P3ZGXYbPzXvmmL...."
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试仅使用 n 值作为键,但出现令牌验证失败的异常。现在我想知道如何获取发行者签名密钥来验证令牌。n+e (string concatenation ?) 是一个解决方案吗?我看到了一个类似的问题Azure AD B2C - 令牌验证不起作用,但它没有回答我的问题,因此想知道在 .net core 中执行它的确切方法。

rsa azure jwt azure-active-directory azure-ad-b2c

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

我在文本文件中有私钥。如何生成 .pem 文件或 .cer 文件

我有计划文本格式的私钥。我想转换为 .pem 或 .cer 文件。我不知道开放 SSL。我能够在 .net 应用程序中使用私钥的纯文本文件。谁来帮帮我。如何将其转换为 .pem 或 .cer 以在我们的项目中使用。

rsa certificate pem x509certificate

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

RSA Python 问题

我在让我的 python 程序解密带有 RSA 问题的消息时遇到问题。出于某种原因,我的 Python 程序停滞不前,实际上只是没有输出任何内容。任何人都知道为什么?

n = 23952937352643527451379227516428377705004894508566304313177880191662177061878993798938496818120987817049538365206671401938265663712351239785237507341311858383628932183083145614696585411921662992078376103990806989257289472590902167457302888198293135333083734504191910953238278860923153746261500759411620299864395158783509535039259714359526738924736952759753503357614939203434092075676169179112452620687731670534906069845965633455748606649062394293289967059348143206600765820021392608270528856238306849191113241355842396325210132358046616312901337987464473799040762271876389031455051640937681745409057246190498795697239
p = 153143042272527868798412612417204434156935146874282990942386694020462861918068684561281763577034706600608387699148071015194725533394126069826857182428660427818277378724977554365910231524827258160904493774748749088477328204812171935987088715261127321911849092207070653272176072509933245978935455542420691737433
c = 18031488536864379496089550017272599246134435121343229164236671388038630752847645738968455413067773166115234039247540029174331743781203512108626594601293283737392240326020888417252388602914051828980913478927759934805755030493894728974208520271926698905550119698686762813722190657005740866343113838228101687566611695952746931293926696289378849403873881699852860519784750763227733530168282209363348322874740823803639617797763626570478847423136936562441423318948695084910283653593619962163665200322516949205854709192890808315604698217238383629613355109164122397545332736734824591444665706810731112586202816816647839648399
e = 65537
q = 156408916769576372285319235535320446340733908943564048157238512311891352879208957302116527435165097143521156600690562005797819820759620198602417583539668686152735534648541252847927334505648478214810780526425005943955838623325525300844493280040860604499838598837599791480284496210333200247148213274376422459183
phi = (q-1)*(p-1)
d = pow(e,-1,phi)
m = pow(c,d)%n
print(m)
Run Code Online (Sandbox Code Playgroud)

我为奇怪的代码格式道歉。提前致谢。

python rsa

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