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);
}
}
Вопросы:
Это возможно?
Какие-нибудь образцы или документы, которые могут установить меня в правильном направлении?