标签: rsa

使用 RSA-OAEP 和 Android 密钥库解密消息:IllegalBlockSizeException

我在一个块内有以下代码,try该代码应该生成 RSA 公钥/私钥对,使用公钥来加密消息并使用私钥再次解密:

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(
         KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(
                 "key1",
                 KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT)
                 .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
                 .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
                 .build());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
byte[] src = "hello world".getBytes();

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] cipherData = cipher.doFinal(src);

Cipher cipher2 = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher2.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] msg = cipher2.doFinal(cipherData);

Run Code Online (Sandbox Code Playgroud)

大部分取自这里这里

最后一行抛出一个javax.crypto.IllegalBlockSizeException没有消息/进一步详细信息的类型异常。logcat异常之前的三行是

 E keymaster1_device: Finish send cmd failed
 E keymaster1_device: ret: 0
 E keymaster1_device: resp->status: -1000
Run Code Online (Sandbox Code Playgroud)

以防万一这很重要。

有谁知道可能出了什么问题吗?

使用minSdkVersion 23

编辑:我刚刚意识到,如果我使用 …

android rsa android-keystore

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

如何为 Identity Server 4 生成和添加签名密钥?

我在 CentOS 上托管我的 ASP.NET Core Web 应用程序。我需要为 Identity Server 设置生产签名密钥。此密钥用于 JWT 令牌签名和验证。

文件:tempkey.rsa

{
  "KeyId": "vbWO1QORQrwci26Cd7q59A",
  "Parameters": {
    "D": "IqOOHtuw10jHnCnrZbzh3TwA40q7KWuby22wl/ooRXn//XJktc8Hwe0JvxD8tvHtk4wfhzkUwiH+zY/cub+kI3oklD9diiWOjFIJcu+k9U9ocXg0ipvrk87rMM3x/u4im9HTYbkNU9Ru6pBdvb8ChAVWR5qOoSVDiFL1Yr8K+sSLix6nm6p0ax2CSf1sJEtNHDRrgI6mSOei97CpiuXpFX/JkwimqvbskcdQY91cgQ9poTWyuolFtFnOx0wSNEG4x1UWVsw85st5JHcU7pN0v1hhQZRcNYBfuZ7uHTFlhbkBip1D191pytSid8C4XTNiLbVPaY1pAqJhDLy6e7bi5Q==",
    "DP": "BVqSzlGs02ZFN9/xPug8VDZCxsReFmtd2xwhO8J7/JzGxxbbe9oq78q2blxDH6nY/I2M2DsKbm2BK2xE9ZHTkSuFHYw39OFHH3UZJNw8d3LMq8d2yZlzBTN21uKzVOwYd0zIchfvTIM3laOxW9j7sObOj8Nd/Pawkm2reFsmIzU=",
    "DQ": "BvpYLvxVPw7qrCtr6unhawV8ox4obq8WZEK/nu6hqBYxydW+zUJWv0fSYgygP9PYykGuTI+nYxCvm9rqw27uLoGsiEFT23Smzz5kDm0h+OzjJc5Wc+YL9wAI+O/xJ/Bi7uyKu+0eTMvG2Y5WpfYhJv2JZIWQUODHZ9SLDe8X3e8=",
    "Exponent": "AQAB",
    "InverseQ": "MKg8Pba2dyIsL3pumcR9e24fOZ8NIizJkTsDZoLkU2ccB6fFKfUioglHHL8ZEPKWT3ByJphJZv9JZIxgtCSLhFC1XcNLsWejPvEb6IMX9L1FIM7Ibo05L3tdZGTFsXwU9/3j2gk/ZFPKrnJXV9+6TToEAmxH7HIIPJONsfDBGho=",
    "Modulus": "nVpQtZgMHnpz9ZfnJs/sTkA8vqPldPe8IL9JQttcrE3RZKLKd+mrcleLqzrRtBCePHfLZMgoX19ShZeq2t4Ea6Sm+5SkV0l0862OD+ILnzFFqaqvQlra7UnRL2FXwxpp09LqLxoDq8fDXfHGOdMumP2TB6mozFgGWGBY9zlc9ctrDoSvfjsagcsLlp2LhCPAg4yCzyV/+4ADnls7NNnAc2Ba1MGFT5OJpfDggL+FXTMlHwTW8LJ9GsT4FAi5Z7dygLOnWc7zpl+Y9sSUtSNOAQlU+oX9VJQD6ZFbosM8nSHcjvCivpxAzOKn+5I6EQXis+pwne9VVjT27iv/NubG5Q==",
    "P": "z53dmREjm+MCchaWsvhPcWVWf7gGezix6KuGzMHa5vhVafrvv2rCy9aHSDWLpxPKb999/2Bw7ExI2b4DTuNkIJTLv/mQEl1PyhtbfLmclPHHbzTM9gnJ3nHrJhpj60/jbinFDkvzV++nqnTKToSgP2TNy5POXWn3FKNHgIxYNwM=",
    "Q": "wgXGJTOdv4B1owmtDmxucssRjWQzW0qEOCr/bBjT32ZofRI1HLBjOwnY4qzxmpD00voWLuphZSBUxtF47IZrrr33vNy2jedD3xy00fgBhuG0exxgQagCSTR0+QoccY8jOWYq2B+FsV9umpOEpgtqq67Moe/MkMp8Gg+8fqiLkfc="
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要为 ASP.NET Core 应用程序生成生产密钥。我将 Kestrel 与 Nginx 一起使用。如何生成 key.rsa 文件并将其用于生产?

我也检查过其他问题。他们正在使用 Windows 证书存储来读取证书。我需要一个使用 key.rsa 在 centos 上工作的解决方案。

到目前为止的代码::

    // Code skipped for brevity....

    #region Add ASP.NET Core Identity Server
        // Using ASP.NET Core Identity Server
        services.AddIdentityServer()
            .AddConfigurationStore<MySQLConfigurationDbContext>()
            .AddOperationalStore<MySQLPersistedGrantDbContext>()
            .AddAspNetIdentity<Identity.BOL.IdentityUser>()                
            .AddDeveloperSigningCredential();
        #endregion

        // Use Authentication …
Run Code Online (Sandbox Code Playgroud)

security rsa asp.net-core identityserver4

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

了解 JSEncrypt

我一直在探索用于 RSA 加密和解密的各种 JavaScript 库,并发现了一个 JSEncrypt,位于https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js

然而,我在尝试理解该库用于 RSA 加密和解密的逻辑和操作时遇到了很大的困难。主要是,

  1. 加密算法使用的算法有哪些?
  2. 使用什么填充方案?
  3. 有盐吗?如果是的话,盐是如何产生的?
  4. 任何其他应注意的信息。

我无法找到这个库的任何像样的文档,而且我无法理解丝毫的源代码。任何帮助是极大的赞赏。

encryption rsa salt padding jsencrypt

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

GO RSA 加载公钥

你好,我想知道如何通过 GO 中的字符串加载 RSA 公钥?我读过一些文档,但我不知道如何加载它?我不想通过 PEM 加载,我想通过

-----BEGIN PUBLIC KEY-----
KEY
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我尝试使用 rsa.EncryptOAEP 但我需要公钥参数,但我不知道如何做到这一点。

func main() {
    pubPem, err := pem.Decode([]byte("KEY"))
    if err != nil {
        fmt.Println(string(err))
        return
    }
    if pubPem.Type != "RSA PUBLIC KEY" {
        fmt.Println("not rsa?")
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过这个,但它不起作用,因为它的 pem.Decode (我认为)

encryption rsa go

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

使用 Go 通过自定义 io.Reader 确定性生成 RSA 私钥

由于可能最好不回答的原因,我需要生成无限的 RSA 公钥/私钥。请注意,这没有用于任何高度安全的事情,所以请不要告诉我不要这样做,是的,我知道它并不理想。我所说的“无限”是指我需要未知数量的它们,例如数十亿到数万亿,并且在使用之前创建它们是不可能的。

由于这会消耗无限的空间并需要无限的时间来生成,因此我需要在运行时执行此操作。

但是,对于给定的输入,我还需要具有相同的密钥对。这意味着我需要根据输入确定性地重新创建 RSA 密钥。

我正在使用 Go,通常您使用以下命令创建密钥,

k, err := rsa.GenerateKey(rand.Reader, 2048)
Run Code Online (Sandbox Code Playgroud)

当然,问题是rand.Readercrypto/rand,因此没有办法播种它。

我认为可以提供我自己的阅读器实现来实现我的目标。我查看了源代码GenerateKey并注意到它正在寻找素数,因此我实现了自己的阅读器,这样我就可以控制返回的“随机”素数,从而允许我在需要时生成相同的密钥,

type Reader struct {
    data   []byte
    sum    int
    primes []int
}

func NewReader(toRead string) *Reader {
    primes := sieveOfEratosthenes(10_000_000)
    return &Reader{[]byte(toRead), 0, primes}
}

func (r *Reader) Read(p []byte) (n int, err error) {
    r.sum = r.sum + 1

    if r.sum >= 100_000 {
        return r.primes[rand.Intn(len(r.primes))], io.EOF
    }

    return r.primes[rand.Intn(len(r.primes))], nil
}

func sieveOfEratosthenes(N int) (primes []int) { …
Run Code Online (Sandbox Code Playgroud)

rsa go

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

实施穷人的ssl

想要实现穷人的ssl只使用RSA加密一个表单的某些字段.JS更好还是我应该去Applet?

javascript security ssl rsa

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

如何从本机代码中的XML或模数/指数导入RSA公钥,以便与Windows CAPI的CryptVerifySignature一起使用?

在C#中,我能够通过以下任一方式对公钥进行哈希验证:

// Import from raw modulus and exponent
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
    RSAParameters rsaKeyInfo = new RSAParameters {Modulus = modulus, Exponent = exponent};
    rsa.ImportParameters(rsaKeyInfo);
    return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}

// Import from XML
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
    rsa.FromXmlString(xmlPublicKey);
    return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}
Run Code Online (Sandbox Code Playgroud)

我需要知道的是,在给定入站RSA公钥的情况下,如何使用CAPI完成同样的事情?

除了了解如何将公钥导入加密提供程序的上下文之外,我还有大多数验证哈希所需的CAPI函数:

HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;

CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);
CryptCreateHash(hCryptProv, CALG_SHA512, 0, 0, &hHash);
CryptHashData(hHash, pDataToHash, lenDataToHash, 0);
CryptVerifySignature(hHash, pSignature, sigLength, NULL, CRYPT_NOHASHOID);
CryptDestroyHash(hHash);
CryptReleaseContext(hCryptProv, 0);
Run Code Online (Sandbox Code Playgroud)

谢谢!

cryptography rsa cryptoapi public-key mscapi

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

JavaScript中的RSA加密,具有可用模数

我有一些Java代码通过json将公共指数和模数(非常,非常长整数)发送到javascript.

我需要在JavaScript中使用这些值对文本字段(密码)应用RSA加密.

我在网上尝试了很多可用的东西,但还没有成功.我在应用程序中没有SSL.

有人可以帮我这个吗?一些样本/精确代码将是一种祝福.

javascript encryption rsa public-key-encryption

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

RSA在javascript中与PHP不同

我现在遇到RSA问题.我在Javascript和PHP中有相同的模数和指数.在javascript中都使用PKCS#1,我使用http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.js

var rsa = new RSAKey();
rsa.setPublic("modulus","ex");
var result = rsa.encrypt(text);
Run Code Online (Sandbox Code Playgroud)

在PHP中,我使用http://phpseclib.sourceforge.net/

require_once 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
$n="modulus";
$e="ex";
$rsa->modulus= new Math_BigInteger($n,16);
$rsa->publicExponent= new Math_BigInteger($e,16);
$key=$rsa->getPublicKey();
$rsa->loadKey($key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt("1234");
echo bin2hex($ciphertext);
Run Code Online (Sandbox Code Playgroud)

但是2结果是不同的.可以请告诉我原因.非常感谢你

javascript php rsa phpseclib jsbn

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

C#.NET中的RSA加密和解密

我有以下代码来加密和解密c#中的消息.当我试图运行它时给出一个例外,即"要解密的数据超过此模数为256字节的最大值"

 public static void Main(string[] args)
    {
        X509Certificate2 cert = new X509Certificate2(@"C:\Data\ABC-rsa-public-key-certificate.cer");
        string encryptedText = EncrypIt("Hello", cert);
        string decryptedText = DecrptIt(encryptedText, cert);
        System.Console.WriteLine(decryptedText);


    }

    public static string EncrypIt(string inputString, X509Certificate2 cert)
    {
        RSACryptoServiceProvider publicKey = (RSACryptoServiceProvider)cert.PublicKey.Key;
        byte[] plainBytes = Encoding.UTF8.GetBytes(inputString);
        byte[] encryptedBytes = publicKey.Encrypt(plainBytes, false);
        string encryptedText = Encoding.UTF8.GetString(encryptedBytes);
        return encryptedText;      
    }

    public static string DecrptIt(string encryptedText, X509Certificate2 cert)
   {
       RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)cert.PublicKey.Key;
       byte[] encryptedBytes = Encoding.UTF8.GetBytes(encryptedText);
       byte[] decryptedBytes = privateKey.Decrypt(encryptedBytes, false);
       string decryptedText = Encoding.UTF8.GetString(decryptedBytes);
       return decryptedText;
   }
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptography rsa

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