Я пытаюсь использовать шифрование AES-256-CBC для шифрования некоторых строк в Java, а затем расшифровать их в приложении Node.js с помощью криптобиблиотеки.
Вот Java шифрование:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.security.spec.KeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class TestEncrypt {
public static String encrypt(String strToEncrypt, String key, byte[] initialVector,String salt) throws Exception{
IvParameterSpec ivspec = new IvParameterSpec(initialVector);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(key.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
return URLEncoder.encode(Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))), StandardCharsets.UTF_8.toString());
}
public static byte[] decodeToBase64(String base64Value) {
return Base64.getDecoder().decode(base64Value);
}
public static String encryptData(String StringToEncode, String base256Key, String base256Iv, String salt) throws Exception {
String encryptedString = encrypt(StringToEncode, base256Key, decodeToBase64(base256Iv), salt);
return encryptedString;
}
public static void main(String args[]) throws Exception {
String originalValue = "hello world";
String encryptedValue = encryptData(originalValue, "TSP88GUiIrX5ZyBWAkvWk7JUMBaSlkVADhEB6gsGS9s=", "ZUCKXBlZT6/SdBxLoEJl0Q==", "ssshhhhhhhhhhh!!!!");
System.out.println("originalValue=" + originalValue);
System.out.println("encryptedValue=" + encryptedValue);
}
}
Вот расшифровка Node.js:
const algorithm = 'aes-256-cbc';
const digest = 'sha256';
function decrypt(strToDecrypt, secretKey, salt, initialVector) {
const key = crypto.pbkdf2Sync(
secretKey,
Buffer.from(salt),
65536,
32,
digest
);
const iv = Buffer.from(initialVector, 'base64');
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(strToDecrypt, 'base64');
decrypted += decipher.final();
return decrypted;
}
decrypt('V7qjZNuL%2FKBWRWc3hx1wRw%3D%3D', 'TSP88GUiIrX5ZyBWAkvWk7JUMBaSlkVADhEB6gsGS9s=', 'ssshhhhhhhhhhh!!!!', 'ZUCKXBlZT6/SdBxLoEJl0Q==');
Проблема в том, что когда я пытаюсь расшифровать то, что я зашифровал в приложении Java, я получаю эту ошибку
error:1C80006B:Provider routines::wrong final block length
Подробнее здесь: https://stackoverflow.com/questions/786 ... r-routines
AES-256-CBC Encrpyt в Java/расшифровка в узле - ошибка: 1C80006B: подпрограммы поставщика:: неверная длина конечного бло ⇐ JAVA
Программисты JAVA общаются здесь
1719440519
Anonymous
Я пытаюсь использовать шифрование AES-256-CBC для шифрования некоторых строк в Java, а затем расшифровать их в приложении Node.js с помощью криптобиблиотеки.
Вот Java шифрование:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.security.spec.KeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class TestEncrypt {
public static String encrypt(String strToEncrypt, String key, byte[] initialVector,String salt) throws Exception{
IvParameterSpec ivspec = new IvParameterSpec(initialVector);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(key.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
return URLEncoder.encode(Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))), StandardCharsets.UTF_8.toString());
}
public static byte[] decodeToBase64(String base64Value) {
return Base64.getDecoder().decode(base64Value);
}
public static String encryptData(String StringToEncode, String base256Key, String base256Iv, String salt) throws Exception {
String encryptedString = encrypt(StringToEncode, base256Key, decodeToBase64(base256Iv), salt);
return encryptedString;
}
public static void main(String args[]) throws Exception {
String originalValue = "hello world";
String encryptedValue = encryptData(originalValue, "TSP88GUiIrX5ZyBWAkvWk7JUMBaSlkVADhEB6gsGS9s=", "ZUCKXBlZT6/SdBxLoEJl0Q==", "ssshhhhhhhhhhh!!!!");
System.out.println("originalValue=" + originalValue);
System.out.println("encryptedValue=" + encryptedValue);
}
}
Вот расшифровка Node.js:
const algorithm = 'aes-256-cbc';
const digest = 'sha256';
function decrypt(strToDecrypt, secretKey, salt, initialVector) {
const key = crypto.pbkdf2Sync(
secretKey,
Buffer.from(salt),
65536,
32,
digest
);
const iv = Buffer.from(initialVector, 'base64');
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(strToDecrypt, 'base64');
decrypted += decipher.final();
return decrypted;
}
decrypt('V7qjZNuL%2FKBWRWc3hx1wRw%3D%3D', 'TSP88GUiIrX5ZyBWAkvWk7JUMBaSlkVADhEB6gsGS9s=', 'ssshhhhhhhhhhh!!!!', 'ZUCKXBlZT6/SdBxLoEJl0Q==');
Проблема в том, что когда я пытаюсь расшифровать то, что я зашифровал в приложении Java, я получаю эту ошибку
error:1C80006B:Provider routines::wrong final block length
Подробнее здесь: [url]https://stackoverflow.com/questions/78674572/aes-256-cbc-encrpyt-in-java-decrypt-in-node-error1c80006bprovider-routines[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия