我在一个块内有以下代码,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
编辑:我刚刚意识到,如果我使用 …
我在 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) 我一直在探索用于 RSA 加密和解密的各种 JavaScript 库,并发现了一个 JSEncrypt,位于https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js。
然而,我在尝试理解该库用于 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 (我认为)
由于可能最好不回答的原因,我需要生成无限的 RSA 公钥/私钥。请注意,这没有用于任何高度安全的事情,所以请不要告诉我不要这样做,是的,我知道它并不理想。我所说的“无限”是指我需要未知数量的它们,例如数十亿到数万亿,并且在使用之前创建它们是不可能的。
由于这会消耗无限的空间并需要无限的时间来生成,因此我需要在运行时执行此操作。
但是,对于给定的输入,我还需要具有相同的密钥对。这意味着我需要根据输入确定性地重新创建 RSA 密钥。
我正在使用 Go,通常您使用以下命令创建密钥,
k, err := rsa.GenerateKey(rand.Reader, 2048)
Run Code Online (Sandbox Code Playgroud)
当然,问题是rand.Reader由crypto/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) 想要实现穷人的ssl只使用RSA加密一个表单的某些字段.JS更好还是我应该去Applet?
在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)
谢谢!
我有一些Java代码通过json将公共指数和模数(非常,非常长整数)发送到javascript.
我需要在JavaScript中使用这些值对文本字段(密码)应用RSA加密.
我在网上尝试了很多可用的东西,但还没有成功.我在应用程序中没有SSL.
有人可以帮我这个吗?一些样本/精确代码将是一种祝福.
我现在遇到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结果是不同的.可以请告诉我原因.非常感谢你
我有以下代码来加密和解密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) rsa ×10
encryption ×4
javascript ×3
cryptography ×2
go ×2
security ×2
android ×1
asp.net-core ×1
c# ×1
cryptoapi ×1
jsbn ×1
jsencrypt ×1
mscapi ×1
padding ×1
php ×1
phpseclib ×1
public-key ×1
salt ×1
ssl ×1