标签: rsa

为什么编辑?1 (mod ?(n)) 可以转换为 ed - 1 = k?(n)?

这是 RSA KEY 生成操作的一个步骤。所以很多文章只是说 ed \xe2\x89\xa1 1 (mod \xcf\x86(n)) 等于 ed - 1 = k\xcf\x86(n)。

\n\n

我不明白他们如何将 (mod \xcf\x86(n)) 更改为 k\xcf\x86(n) ?

\n

algorithm math rsa

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

OpenSSL RSA 算法的盐在哪里?

我在 OpenSSL 中使用选项找到了对称例程的加盐技术-salt。但我找不到非对称 RSA 算法的 salt 选项。

openssl rsa salt

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

Google Play 结算响应签名验证

我正在开发一个使用应用内购买的 Android 应用程序。用户购买后,Play 商店会以 JSON 字符串形式发送响应。该响应看起来像这样(当然,没有编辑敏感信息):

{  
   "type":"android-playstore",
   "id":"<My Application ID>",
   "purchaseToken":"<The Purchase Token>",
   "receipt":{  
      "orderId":"<The Order ID>",
      "packageName":"com.example.skeleton",
      "productId":"credit.basic",
      "purchaseTime":1436546971245,
      "purchaseState":0,
      "purchaseToken":"<The Purchase Token>"
   },
   "signature":"Im27prAnxYwdRoug..."
}
Run Code Online (Sandbox Code Playgroud)

Google Play 结算安全文档指出

Google Play 对包含采购订单响应数据的 JSON 字符串进行签名。Google Play 使用开发者控制台中与您的应用程序关联的私钥来创建此签名。

我不太擅长加密,但我的理解是 RSA 签名的工作原理是获取要签名的字符串的 SHA1 哈希值,然后使用私钥对其进行加密以生成签名。当想要验证字符串的来源时,使用公钥对签名进行解密(证明它是使用私钥加密的),并将解密的哈希值与消息的哈希值进行比较,看看它们是否匹配。

然而,这里有一个问题。签名本身包含在发送到我的应用程序的 JSON 字符串中。您无法在签名后更改字符串,因此当 Google 说他们“对包含响应数据的 JSON 字符串进行签名”时,它们并不意味着我收到的整个 JSON 字符串。他们必须签署字符串的某些部分并将签名附加到该部分。我的问题是我无法弄清楚字符串的哪一部分已签名。使用此问题中描述的签名验证实现,我尝试验证删除了签名属性的 JSON 字符串,不带括号,仅包含收据部分等。为了更好地衡量,我尝试了整个字符串,包括签名。我似乎找不到这个 JSON 字符串中可以用我的公钥进行加密验证的任何部分。我是否应该使用字符串的某些部分,或者我只是不明白签名是如何工作的?

encryption android rsa sign google-play

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

RSA-2048 解密不起作用 - PKCS1_OAEP“解密不正确。”

该代码应该建立一个监听来自投票网站的连接的服务。它是一个监听来自外部(客户端)连接的服务器。当客户端连接时,客户端等待发送版本号。一旦我的服务器/侦听器发送版本号,客户端就会使用我提供的公钥进行 RSA 2048 位加密的 256 字节块进行响应。然后必须对该块进行解码,(稍后)我将读取内容。我陷入无法解密的困境:

我明白了:

开始连接...

来自 ('50.28.6.244', 35338) 的连接

正在发送版本号...

接收加密块

回溯(最近一次调用最后一次):

文件“voteListener.py”,第 97 行,位于

主要(私钥)

文件“voteListener.py”,第 49 行,在 Main 中

解码文件=decode_msg(数据,私钥)

文件“voteListener.py”,第 58 行,decode_msg

密文 = cipher.decrypt(msg)

文件“C:\Python27\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py”,第 227 行,解密

引发 ValueError("解密不正确。")

ValueError:解密不正确。

C:\Users\STEXAS\Desktop\vote>暂停

按任意键继续 。。。

我的代码:

import socket
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from os import path


def Main(privatekey):
    host = "0.0.0.0"
    port = 8192
    version = "VOTIFIER 1.9"
    print("starting connection...")
    while True:
        s = socket.socket()
        s.bind((host, port))
        s.listen(1)
        c, addr = …
Run Code Online (Sandbox Code Playgroud)

rsa pycrypto python-2.7

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

d2i_RSA_PUBKEY、d2i_RSAPrivateKey 和 d2i_RSAPublicKey 返回 NULL

我使用以下命令创建了 RSA 私钥:

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

我必须在该项目中使用 DER 编码的密钥 (PKCS#1),因此我从这个 PEM 编码的私钥文件生成了两个 DER 文件 - 一个包含私钥,另一个包含公钥。

openssl rsa -inform PEM -in keypair.pem -outform DER -pubout -out public.der

openssl rsa -inform PEM -in keypair.pem -outform DER -out private.der
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将这两个文件的内容加载到 char* 变量中。

以下均未按预期工作:

d2i_RSA_PUBKEY(NULL, &public_key_bytes, public_key_length);

d2i_RSAPublicKey(NULL, &public_key_bytes, public_key_length);

d2i_RSAPrivateKey(NULL, &private_key_bytes, private_key_length);
Run Code Online (Sandbox Code Playgroud)

我知道这一点,因为他们都回来了null。我还尝试了以下方法:

RSA * rsa = RSA_new();
d2i_RSA_PUBKEY(&rsa, &public_key_bytes, public_key_length);

RSA * rsa = RSA_new();
d2i_RSAPublicKey(&rsa, &public_key_bytes, public_key_length);

RSA * rsa = RSA_new();
d2i_RSAPrivateKey(&rsa, &private_key_bytes, private_key_length);
Run Code Online (Sandbox Code Playgroud)

皆归 …

c openssl rsa

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

RSA双向解密?

我一直在 python 中尝试 RSA 加密(cryptography.hazmat.primitives.ametry)。我有以下设置:一端是具有公钥的客户端,将加密数据发送回保存私钥的服务器。现在我已经可以进行单向加密,但我想知道您将如何(或者是否应该)安全地解密消息客户端。我想过只加密私钥并存储它,但密码会出现在代码中并使密钥暴露。有没有办法通过密钥交换安全地实现这一点?或者——最可能的选择——这是对协议的滥用吗?

编辑:想要澄清的是,这里可能的问题是,以这种方式使用 RSA 可能会暴露文件系统上或服务器和客户端之间的私钥。

cryptography rsa secure-coding

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

RSA分块加密大数据

对于加密、解密、签名和验证签名,我使用此处的代码DotnetCore.RSA

在我开始处理大文本之前,它一直运行良好。

通过 RSA 加密不适用于大文本。大,超过 245 个字节,具有 2048 个 RSA 密钥

我在尝试加密大文本时遇到异常:

异常消息:Interop.Crypto.OpenSslCryptographicException: 'error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size'

加密功能:

public string Encrypt(string text) {
  if (_publicKeyRsaProvider == null) {
    throw new Exception("_publicKeyRsaProvider is null");
  }
  return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.Pkcs1));
}
Run Code Online (Sandbox Code Playgroud)

编写 DotnetCore.RSA 的开发人员建议将长文本分成许多小文本,分别加密并连接它们

有什么建议吗,正常还是不正常?也许建议一些用于 .net Core 的 RSA 加密库

c# encryption rsa .net-core

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

Javascript,crypto.subtle:如何导入RSA私钥?

我使用 python 生成了 RSA 密钥对,我想在 javascript 中导入它。我成功导入了公钥,但在私钥导入方面遇到了困难。

Python :

from Cryptodome.PublicKey import RSA

key = RSA.generate(1024)
private_key = key.export_key().decode("ascii")
public_key = key.publickey().export_key().decode("ascii")
Run Code Online (Sandbox Code Playgroud)

JavaScript:

function str2ab(str) {
  const buf = new ArrayBuffer(str.length);
  const bufView = new Uint8Array(buf);
  for (let i = 0, strLen = str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

async function importRsaPublicKey(pem) {
  // fetch the part of the PEM string between header and footer
  const pemHeader = "-----BEGIN PUBLIC KEY-----";
  const pemFooter …
Run Code Online (Sandbox Code Playgroud)

javascript rsa python-3.x

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

如何从 PEM 文件中读取 RSA 公钥并使用它在 C# 中的 BouncyCastle 中进行加密?

C# BouncyCastle 包含一个名为 Org.BouncyCastle.Utilities.IO.Pem.PemReader 的类,该类似乎采用 PEM 格式的 RSA 公钥文件。我查看了这个链接:how can I conversion pem public key to rsa public key with bouncycastle in c#?

但它似乎在 PemReader 上使用了不存在的方法,称为 ReadObject。所以我改为编写以下代码。

var pemReader = new PemReader(File.OpenText(@"...rsa public key file path ..."));
var pemObject = pemReader.ReadPemObject();
var rsaPublicKeyBytes = pemObject.Content;
Run Code Online (Sandbox Code Playgroud)

一旦我获得 RSA 公共字节,我不知道如何进一步进行。我希望能够执行以下操作:

var rsaCipher = new RsaEngine();
var oaepEncoding = new OaepEncoding(rsaCipher, new Sha256Digest());
var publicKey = new RsaKeyParameters(...);
oaepEncoding.Init(true, publicKey);
var actualEncryptedBytes = oaepEncoding.ProcessBlock(plainBytes, 0, plainBytes.Length);
Run Code Online (Sandbox Code Playgroud)

我想我不确定如何使用 RSA 公共字节构造 RsaKeyParameters。有人能指出我正确的方向吗?或者我在这里完全走错路了?

c# cryptography rsa bouncycastle .net-core

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

NodeJS RSA 预哈希符号

我正在运行 NodeJS 8.12.0,并且必须在哈希上设置签名,而不需要重新哈希它,从而执行原始签名。或者,换句话说,用私钥对散列值进行加密。

const crypto = require('crypto');

// 4096 bits key.
let pk  = "<BASE64 DER>";
let pub = "<BASE64 DER>";

// Transform them to PEM.
pk  = `-----BEGIN PRIVATE KEY-----\n${pk.replace('\n', '')}\n-----END PRIVATE KEY-----\n`;
pub = `-----BEGIN PUBLIC KEY-----\n${pub.replace('\n', '')}\n-----END PUBLIC KEY-----\n`;

// Load the data to sign and set the signature.
const fingerprint = Buffer.from('2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824','hex');
const signature = crypto.privateEncrypt({
        key: pk,
        padding: crypto.constants.RSA_PKCS1_PADDING
    }, 
    fingerprint
);

// Unfortunately, the server is not able to verify the signature...
console.log(signature.toString('hex'));
Run Code Online (Sandbox Code Playgroud)

因此,我使用私钥查看了消息哈希的原始加密,最终得到了某种 …

rsa signature node.js cryptojs

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