Почему следующее шифрование и дешифрование AES работает в основном методе, но не на сервере на стороне клиента? - PullRequest
0 голосов
/ 01 августа 2020

Не только указанная выше зашифрованная строка не может быть расшифрована со стороны клиента. Но также его нельзя расшифровать на следующем веб-сайте. https://www.devglan.com/online-tools/aes-encryption-decryption

ошибка, которую я получаю, когда пытаюсь расшифровать на указанном выше веб-сайте, - это

ошибка: данный последний блок не заполнен должным образом. Такие проблемы могут возникнуть, если во время дешифрования используется неверный ключ.

PS: Я устанавливаю секретный ключ как stati c для целей тестирования.

package com.snapwork.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import com.sun.mail.util.ASCIIUtility;

import javax.crypto.spec.IvParameterSpec;
 
public class AES {
 
    private static SecretKeySpec secretKey;
    private static byte[] key ;
    private static byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    private static IvParameterSpec ivspec;
    

 
public static void setKeyAndIV(String myKey) 
{
    MessageDigest sha = null;
    ivspec = new IvParameterSpec("39d0a599ea7c1761".getBytes());
   
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-256");
        key = sha.digest(key);
        secretKey = new SecretKeySpec(key, "AES");
    } 
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

public static String encrypt(String strToEncrypt, String secret) 
{
    try
    {
        setKeyAndIV(secret);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
    } 
    catch (Exception e) 
    {
        System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
}

public static String decrypt(String strToDecrypt, String secret) 
{
    try
    {
        setKeyAndIV(secret);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } 
    catch (Exception e) 
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

public static void main(String[] args) 
{
    final String myKey = "8e990516e545ba4103dcb32a3462c54b";
    
    String fullName = "ANURAG"; String mobileNumber = "9930858174"; String
      emailId = "xyz@gmail.com"; String custIdentifier = "4127672700000765";
      String availableCredits = "9815646465"; String eligibleOfferTag = "94913";
     
     
     
    String inputString = fullName + "|" + mobileNumber + "|" + emailId + "|" + custIdentifier + "|" + availableCredits + "|" + eligibleOfferTag;
    String decryptedString = AES.encrypt(inputString, myKey) ;
     
    System.out.println(decryptedString);
}

}

1 Ответ

0 голосов
/ 01 августа 2020

Я только что прокомментировал эту строку key = sha.digest(key);, и она заработала. Проблема может заключаться в том, что клиент не использует эту линию. Эта строка могла изменять stati c секретный ключ, поэтому я не мог расшифровать на сайте devglan

В любом случае, спасибо всем за предложения.

...