RSA зашифровывает строку в C#, используя уже существующие ключи, сгенерированные библиотекой Java

Мне нужно перенести на C# часть существующей и работающей системы Java, которая обрабатывает шифрование / дешифрование строки. Мое решение C# будет шифровать строку, и существующая система Java должна будет иметь возможность дешифровать эту строку.

Обе системы должны будут использовать существующие закрытые и открытые ключи. Ключи были сгенерированы из системы Java (расширение ".key"). Предположим, что обе системы будут иметь безопасный и надежный доступ к одним и тем же файлам ключей.

Самым близким, что я нашел, является этот поток ( шифрование RSA .NET Java расшифровка), но он использует RSACryptoServiceProvider.FromXmlString(). Большинство других примеров касаются генерации ваших собственных ключей с использованием RSACryptoServiceProvider и шифрования / дешифрования всех в одном решении. Короче говоря, я не могу найти способ сделать это.

Для справки приведен соответствующий код Java, который в настоящее время обрабатывает шифрование (очевидное задание вырезать / вставить, поэтому, пожалуйста, не обращайте внимания на незначительные синтаксические ошибки; опять же, в настоящее время это работает нормально)

import java.io.IOException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;

public class Encryptor{

    private static final String XFROM = "RSA";
    private static PublicKey iPubKey;

    public String encryptString() {
        // init
        byte[] pkeyByte = Util.grabKey("keys/private.key");
        X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pkeyByte);

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        iPubKey = keyFactory.generatePublic(pubKeySpec);

        // encrypt          
        String uid = "string_to_encrypt";
        byte[] dataBytes = uid.getBytes();
        byte[] encBytes = encrypt(dataBytes, iPubKey, XFROM);

        String result = Base64.encodeBase64String(encBytes);

        Return result;
    }

    private static byte[] encrypt(byte[] inpBytes, PublicKey key, String xform) throws Exception {
        Cipher cipher = Cipher.getInstance(xform);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(inpBytes);
    } 

}

Вопросы:

Это возможно?

Какие-нибудь образцы или документы, которые могут установить меня в правильном направлении?

0 ответов

Другие вопросы по тегам