Я пытаюсь зашифровать сообщение, используя Groovy Скрипт. Ниже мой обновленный код, но не работает. не могли бы вы помочь.
Требуется зашифровать сообщение и затем закодировать его на базе 64. У меня есть функция для кодирования, но шифрование не работает.
для информации - 1. У меня есть ключи в хранилище ключей 2. Алгоритм шифрования RSA SHA256
Я уже упоминал этот вопрос - получение исключения IllegalBlockSizeException: данные не должны быть длиннее 256 байт при использовании rsa
Тем не менее, моя система-получатель является банком, и я не могу попросить их расшифровать по своему усмотрению. они ожидают RSA-подписи и base 64-кодированного выхода.
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.keystore.KeystoreService;
import java.security.cert.Certificate;
import java.security.KeyPair;
import java.security.PrivateKey;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import org.apache.commons.codec.binary.Base64;
import groovy.xml.Namespace;
import groovy.util.XmlParser;
import groovy.xml.XmlUtil;
def Message processData(Message message) {
KeystoreService service = ITApiFactory.getApi(KeystoreService.class, null);
Certificate cert = service.getCertificate("alias");
KeyPair keypair = service.getKeyPair("alias");
PrivateKey privateKey = keypair.getPrivate();
//Body
def body = message.getBody(java.lang.String) as String;
final Cipher cipher = Cipher.getInstance("RSA");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, privateKey);
def cipherText = cipher.doFinal(body.getBytes());
return cipherText;
}
Ошибка
javax.script.ScriptException: java.lang.Exception:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes