Encryption-Decryption не работает между программой клиент-сервер - PullRequest
1 голос
/ 03 марта 2020

Мы столкнулись с проблемой шифрования-дешифрования данных. На стороне сервера у нас есть расшифровка java кода, подобного этому

public static String decrypt(byte[] data, PrivateKey base64PrivateKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    return new String(cipher.doFinal(data));
}

Для шифрования на стороне клиента мы используем jsencrypt. код выглядит следующим образом

encrypt(numInfo) {
 this.readKeytext('assets/public.pem');
 getKey = getKey.replace(/(^"|"$)/g, ''); 
 if (cardNum.length > 117) { 
 } else {
   this.$encrypt.setPublicKey(getKey);
   this.cypherCardnum = this.$encrypt.encrypt(numInfo); 
   return this.cypherCardnum;
 }
}

Мы используем технику генерации ключей RSA-3072 для создания открытых и закрытых ключей. Может кто-нибудь предложить мне лучший способ сделать шифрование в angularjs, которое будет соответствовать реализации на стороне сервера?


Обновление:

Образец:

Исходные данные: 4000000000000002

Личный ключ:

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
dQrJ3ocrB8C53GzXZouoyQ== 

Публи c ключ:

MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAo9fUpIx48x3SLwkjljL1
yxXy49sCkXIGWpElUpqgfytcnlxP2TBlb/3J2Q9KjW4NvTx1CJug5FCqGMYOp5Kn
cszAwCKRG9XSIcw3LSKqj2Dp5dhTcFGOoeRffBu79HBCimHV6RUX2IKy2Qpqg8SF
ezuUw3yVzCA5Fwc6KLTz8a1gpEPxY2yDdOEjXosIipjunsXTxGFJJR0fBwT0C3qK
EjFSd5EGDkM1eh3F5kpuwBM8eLZ+IXB8usleRl5F63CcUVGkWGEeaf5RvRYAk2VR
kRrl2J8ShnJkc2GYAer23cY0+5VIGnmfmEfBI61TmfmrYfqrjaLfUwRVy3tZNmJq
XX+lME3JA1pfqqLxcle28RFigQlbhAlWrXDF5WgSmgBgXU3Nlil61Ap6JNG4E7Yu
0rHF8IGcG/kGv1zXrND1z5/6G6XPVnzkFyxYuFne8m0XR8HJNzcQdt9VTbopy/YZ
PBLxXFokrrUwWQpQRkh98cSd8pOXVg6i9HVbzqVunc1PAgMBAAE=

Зашифрованные данные :

MtZahearfNk7awePM/B11fsx0DcUVnjWF9vrVkAG4g7wNNeZyMAN0F2JFO2SesfjAlv5THtycRh/5DZNBQDQDeWL2O0FEF4ByY/ZsBnJAA16n9iICK17ECuIAl2Yzlra2S+10uS5A7YFkzDRfQpwfv3S8FZ/srqT8kdTDHb5Rn+3XA18h39qyxvwL6+7WueTkE8bcRTKtaOfANspsxxa28NfwnR3yhyPQsETHWFklJChFE08ULWKf9ILT3j1+rME8ZNyUZ25B9VKJyaQ6Dk/u2M127SfQNvJf0ATlM/WRTIiVJ5Xx+k4sW9WsAGu2pQnrN43eGor5fbrkwnY7sNA12oLkGvP40UCsB2OOW1tNd0PiwAb3IN49xtPvKDFCjJiKBK8zz5DOmGvUdAIpeK2WoU6OeYIkouXlFWTRFQjbbS37vHWVz2IWB+4gyBGBGjOX3uWT3y+V5O729BWNf0j95je3EnX2fcEbXVi4FyHcrheTgSID/FLPqW/dVhO56yO

Исключение:

java.lang.IllegalArgumentException: Illegal base64 character 2e at
java.util.Base64$Decoder.decode0(Base64.java:714) at 
java.util.Base64$Decoder.decode(Base64.java:526) at
com.ibsplc.ps.common.utils.RSAUtil.getPrivateKey(RSAUtil.java:63)

Обновление:

public static PublicKey getPublicKey(String base64PublicKey){ 
    PublicKey publicKey = null; 
    try{ 
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes()));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
        publicKey = keyFactory.generatePublic(keySpec); 
        return publicKey; 
    } catch (NoSuchAlgorithmException e) { 
        e.printStackTrace(); 
    } catch (InvalidKeySpecException e) { 
        e.printStackTrace(); 
    } 
    return publicKey; 
}

1 Ответ

0 голосов
/ 20 марта 2020

Я внес изменения как на стороне клиента, так и на стороне сервера. Тогда это сработало. Изменение на стороне клиента: this.cypherCardnum = this. $ Encrypt.encrypt (cardNum.toString ());

На стороне сервера: Cipher cipher = Cipher.getInstance ("RSA / None / PKCS1Padding);

...