Java等效于C#RSACryptoServiceProvider

时间:2018-07-02 12:53:23

标签: java c# rsa

我是加密算法和C#代码的新手。 我正在尝试使用C#代码中使用RSA算法对某些数据进行加密解密。下面是C#代码。我在Java中找不到任何类似的库,您能帮我得到相同的Java等效项吗?

 public byte[] Encrypt(byte[] data, string keyContainerName, bool doOaepPadding = false)
    {
        return DoCryptoTransformation(data, true, keyContainerName, doOaepPadding);
    }

    public byte[] Decrypt(byte[] data, string keyContainerName, bool doOaepPadding = false)
    {
        return DoCryptoTransformation(data, false, keyContainerName, doOaepPadding);
    }

    private byte[] DoCryptoTransformation(byte[] data, bool encryption, string keyContainerName,
        bool doOaepPadding = false)
    {
        try
        {
            byte[] processedData;
            RSACryptoServiceProvider.UseMachineKeyStore = true;
            CspParameters cspParams = CreateCspParameters(keyContainerName);

            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams))
            {
                processedData = encryption ? rsa.Encrypt(data, doOaepPadding) : rsa.Decrypt(data, doOaepPadding);
            }
            return processedData;
        }
        catch (CryptographicException ex)
        {
            string message = string.Format("RsaCryptoProvider: Failed to {0} data.", encryption ? "encrypt" : "decrypt");
            Logger.Error("{0}. Exception details: {1}", message, ex);
            throw new CryptoProviderException(message, ex);
        }
    }

    private static CspParameters CreateCspParameters(string keyContainerName)
    {
        CspParameters cspParams = new CspParameters();
        cspParams.KeyContainerName = keyContainerName;
        cspParams.Flags |= CspProviderFlags.UseExistingKey;
        cspParams.Flags |= CspProviderFlags.UseMachineKeyStore;
        return cspParams;
    }
}

我想重新定义Java实现的方法:

var previousKey = _encryptionService.RsaDecrypt(Key, CoreSettings.Instance.KeyContainerName);

感谢帮助!

0 个答案:

没有答案