如何使用.net中的充气城堡通过RSA / ECB / OAEPWithSHA256AndMGF1Padding进行加密?

拉古

网上有一些示例,说明如何使用Java中的充气城堡库通过RSA / ECB / OAEPWithSHA256AndMGF1Padding进行加密(示例显示在分解RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING上)。但是,C#中的充气城堡库似乎与Java库有所不同,因为它更显式(因此需要更多步骤),而且我无法弄清楚如何使其适用于上述算法。

如果有人可以使用RSA / ECB / OAEPWithSHA256AndMGF1Padding将一些代码示例放在一起以加密示例文本,将不胜感激。

总统詹姆斯·波尔克

不幸的是,即使是Java结构是模糊的,因为它是开放的,以不同的和不兼容的解释,如图所示这里Java Bouncycastle提供程序将做一件事,"RSA/ECB/OAEPWithSHA-256AndMGF1Padding"而Oracle提供程序将做另一件事。

您可以并且应该在Java和C#代码中确切指定所需的行为。

C#:

using System;
using System.IO;
using System.Text;
using Org.BouncyCastle.Crypto.Digests;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.OpenSsl;

namespace ScratchPad
{
    class MainClass
    {
        public static void OaepEncryptExample()
        {
            var plain = Encoding.UTF8.GetBytes("The sun also rises.");
            // Read in public key from file
            var pemReader = new PemReader(File.OpenText(@"/Users/horton/tmp/key-examples/myserver_pub.pem"));
            var rsaPub = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)pemReader.ReadObject();
            // create encrypter
            var encrypter = new OaepEncoding(new RsaEngine(), new Sha256Digest(), new Sha256Digest(), null);
            encrypter.Init(true, rsaPub);
            var cipher = encrypter.ProcessBlock(plain, 0, plain.Length);
            Console.WriteLine(Convert.ToBase64String(cipher));
        }
    }
}

Java:

import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.openssl.PEMParser;

import javax.crypto.Cipher;
import javax.crypto.spec.OAEPParameterSpec;
import javax.crypto.spec.PSource;
import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.MGF1ParameterSpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

public class OaepExample {
    public static void oeapDecrypt() throws Exception {
        final PEMParser pemParser = new PEMParser(new FileReader("/Users/horton/tmp/key-examples/myserver.p8"));
        final PrivateKeyInfo privKey = (PrivateKeyInfo) pemParser.readObject();
        KeyFactory kf = KeyFactory.getInstance("RSA");
        RSAPrivateKey rsaPriv = (RSAPrivateKey) kf.generatePrivate(new PKCS8EncodedKeySpec(privKey.getEncoded()));
        String cipher64 = "k8AYnTV6RgzQXmD7qn8QwucDXGjbYct+qMVvDmMELTnUcCOeTp82oJ0BryZyEEGXVSZ2BFg95e72Jt9ZAKWNcot2rZ0+POcda8pzY/MfdwIpnSJKITovk8xHL3B/jZDJyQrLMmNPjVV/uBFY2vgKhhLhJzzAJATcGpNdw+gF+XI=";
        Cipher decrypter = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        OAEPParameterSpec parameterSpec = new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256,
                PSource.PSpecified.DEFAULT);
        decrypter.init(Cipher.DECRYPT_MODE, rsaPriv, parameterSpec);
        final byte[] plain = decrypter.doFinal(Base64.getDecoder().decode(cipher64));
        System.out.println(new String(plain, StandardCharsets.UTF_8));

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用C#中的RSA / ECB / OAEPWithSHA-1AndMGF1Padding加密

RSA / ECB / OAEPWithSHA-256AndMGF1Padding但使用SHA-256的MGF1吗?

C#Bouncy Castle中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING-输入太大,无法使用RSA密码

分解RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

使用SHA-256AndMGF1Padding Swift加密RSA / ECB / OAEP

Node.js中的Java的RSA / ECB / OAEPWithSHA-256AndMGF1Padding等效项

错误的填充例外-pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

带有 rsa/ecb/oaepwithsha-256andmgf1padding 的 SubtleCrypto

获取此“ RSA / ECB / OAEPWithSHA-256AndMGF1Padding”组合用于红宝石

不同的加密Android与纯Java-RSA / ECB / OAEPWithMD5AndMGF1Padding

NET的Java RSA / ECB / PKCS1Padding加密

iOS上的RSA加密(RSA / ECB / PKCS1Padding)

使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

如何在Elixir中进行AES-256-ECB加密?

使用PHP进行DES ECB加密

使用通用加密的 Swift 3.1 中的 DES/ECB/NoPadding

如何使用NodeJS中的aes-256-ecb正确加密字符串并使用OpenSSL的命令行解密?

找不到任何支持RSA / None / OAEPWITHSHA-256ANDMGF1PADDING的提供程序

PHP 7.2 中的 RSA/ECB/PKCS1Padding 解密

使用模量和指数的C#中的RSA / ECB / PKCS1填充解密

使用ECB模式加密无法解密字节

在 Ruby 中使用 DES ECB 加密数据

JPK-CryptoAPI RSA 256 / ECB / PKCS#1一次秘密密码加密,使用证书中的公钥(解决方案)

.NET下的原始RSA加密(又名ECB / NoPadding)?

使用Objective-C加密并使用MCRYPT_RIJNDAEL_256 MCRYPT_MODE_ECB在PHP中解密

PHP中的C#TripleDES ECB加密

如何使用充气城堡提供程序解密 SunJCE 加密数据

AES ECB加密组

AES ECB iOS加密