Это метод шифрования C#, я хочу использовать его на Java. Мой код всегда показывает:
Учитывая, что последний блок не заполнен должным образом. Такие проблемы могут возникнуть, если во время расшифровки используется неверный ключ.
Можете ли вы помочь перенести этот код C# на Java?
Код C#:
EncryptData = bL6ZXAUGsE9+Ea9BVgrYYDJrzmtzjooHbHqc1K/YMGE=
rawData = abcd1234
Код Java
public static String Decrypt(String cipherText) {
byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(Password.toCharArray(), SALE, 100, 48 * 8);
byte[] keyBytes = factory.generateSecret(spec).getEncoded();
byte[] key = new byte[32];
byte[] iv = new byte[16];
System.arraycopy(keyBytes, 0, key, 0, 32);
System.arraycopy(keyBytes, 32, iv, 0, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] decryptedBytes = cipher.doFinal(cipherBytes);
return new String(decryptedBytes, StandardCharsets.UTF_16LE);
} catch (Exception e) {
return e.getMessage();
}
}
Код C#
public static string Decrypt(string cipherText)
{
string Password = "abcde~1234";
byte[] cipherBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,
new byte[] {0x49, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
MemoryStream ms = new MemoryStream();
Aes alg = Aes.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
CryptoStream cs = new CryptoStream(ms,
alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return Encoding.Unicode.GetString(decryptedData);
}
public static string Encrypt(string clearData)
{
string Password = "abcde~1234";
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,
new byte[] {0x49, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
Aes alg = Aes.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,
alg.CreateEncryptor(), CryptoStreamMode.Write);
byte[] clearDataBytes = Encoding.Unicode.GetBytes(clearData);
cs.Write(clearDataBytes, 0, clearDataBytes.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return Convert.ToBase64String(encryptedData);
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... g-encrypti
Как устранить ошибку «Учитывая, что последний блок не дополнен должным образом» при переносе кода шифрования с C# на Jav ⇐ JAVA
Программисты JAVA общаются здесь
1736852341
Anonymous
Это метод шифрования C#, я хочу использовать его на Java. Мой код всегда показывает:
Учитывая, что последний блок не заполнен должным образом. Такие проблемы могут возникнуть, если во время расшифровки используется неверный ключ.
Можете ли вы помочь перенести этот код C# на Java?
Код C#:
EncryptData = bL6ZXAUGsE9+Ea9BVgrYYDJrzmtzjooHbHqc1K/YMGE=
rawData = abcd1234
Код Java
public static String Decrypt(String cipherText) {
byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(Password.toCharArray(), SALE, 100, 48 * 8);
byte[] keyBytes = factory.generateSecret(spec).getEncoded();
byte[] key = new byte[32];
byte[] iv = new byte[16];
System.arraycopy(keyBytes, 0, key, 0, 32);
System.arraycopy(keyBytes, 32, iv, 0, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] decryptedBytes = cipher.doFinal(cipherBytes);
return new String(decryptedBytes, StandardCharsets.UTF_16LE);
} catch (Exception e) {
return e.getMessage();
}
}
Код C#
public static string Decrypt(string cipherText)
{
string Password = "abcde~1234";
byte[] cipherBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,
new byte[] {0x49, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
MemoryStream ms = new MemoryStream();
Aes alg = Aes.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
CryptoStream cs = new CryptoStream(ms,
alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return Encoding.Unicode.GetString(decryptedData);
}
public static string Encrypt(string clearData)
{
string Password = "abcde~1234";
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,
new byte[] {0x49, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
Aes alg = Aes.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,
alg.CreateEncryptor(), CryptoStreamMode.Write);
byte[] clearDataBytes = Encoding.Unicode.GetBytes(clearData);
cs.Write(clearDataBytes, 0, clearDataBytes.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return Convert.ToBase64String(encryptedData);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79354486/how-to-solve-error-given-final-block-not-properly-padded-when-porting-encrypti[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия