У меня есть приложение, которое шифрует и расшифровывает поле в C# с использованием RFC2898DeariveBytes . Я пытался разработать решение для кросс -платформного платформы, используя Cryptojs PBKDF2, чтобы написать метод расшифровки в JavaScript. Тем не менее, я не смог выяснить следующие 2 выпуска: < /p>
Я не могу получить клавиши, чтобы соответствовать < /li>
Я не могу понять, каким должен быть IV в Javascript. < /Li>
< /ul>
Geworge < /strong> < /p>
. иметь большой контроль над этим, поскольку он поддерживает много устаревших систем) < /p>
private readonly RijndaelManaged _alg = new RijndaelManaged();
public EncryptionManager()
{
var secret = 'D2s1d_5$_t0t3||y_4c3$0m3!1!1!!';
var salt = 'o6805542kcM7c5';
var saltBytes = Encoding.ASCII.GetBytes(salt);
using (var keyDeriver = new Rfc2898DeriveBytes(secret, saltBytes))
{
_alg.Key = keyDeriver.GetBytes(_alg.KeySize / 8); // _alg.KeySize = 256
}
}
< /code>
код JS, который у меня есть для генерации ключей: < /p>
const secret = CryptoJS.enc.Utf8.parse('D2s1d_5$_t0t3||y_4c3$0m3!1!1!!');
// Encoding the Salt in from UTF8 to byte array
const salt = CryptoJS.enc.Utf8.parse('o6805542kcM7c5');
// Creating the key in PBKDF2 format to be used during the decryption
const key = CryptoJS.PBKDF2(secret.toString(CryptoJS.enc.Utf8), salt, {
keySize: 128 / 32,
iterations: 1000,
});
< /code>
Это в идеале должно работать в соответствии с моим исследованием, но ключи, полученные в обоих кодах, никогда не бывают одинаковыми. Я сгорел много полуночного масла, царапая голову над тем, что я делаю неправильно, но я не понимаю, почему.
дешифрование
Метод дешифрования в C# заключается в следующем:
public string Decrypt(string ciphertext)
{
var cipherTextBytes = Convert.FromBase64String(ciphertext);
var ivSize = BitConverter.ToInt32(cipherTextBytes, 0);
var iv = new byte[ivSize];
var offset = sizeof(int);
Array.Copy(cipherTextBytes, offset, iv, 0, ivSize);
offset += ivSize;
using (var msDecrypt = new MemoryStream(cipherTextBytes, offset, cipherTextBytes.Length - offset))
{
lock (_syncLock)
{
using (var decryptor = _alg.CreateDecryptor(_alg.Key, iv))
using (var decryptStream = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var reader = new StreamReader(decryptStream))
{
return reader.ReadToEnd();
}
}
}
}
< /code>
Мое решение для дешифрования в JS: < /p>
const decrypt = (encryptedData: string): string => {
// Enclosing the test to be decrypted in a CipherParams object as supported by the CryptoJS library
const cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(encryptedData),
});
// What should be the IV be here?
const iv = CryptoJS.enc.Hex.parse(encryptedData);
// Decrypting the string contained in cipherParams using the PBKDF2 key
const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {
mode: CryptoJS.mode.CBC,
// iv,
padding: CryptoJS.pad.Pkcs7,
});
decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
return decryptedText;
}
< /code>
Я предполагаю, что если бы я мог получить правильный ключ и IV, я мог бы решить это. Я много просмотрел для совместимых решений, но я не могу получить то, что я делаю неправильно.
Любая помощь была бы очень оценена.>
Подробнее здесь: https://stackoverflow.com/questions/650 ... om-c-sharp
Генерировать ключ RFC2898DeverBytes в JavaScript от C# ⇐ C#
Место общения программистов C#
-
Anonymous
1751485417
Anonymous
У меня есть приложение, которое шифрует и расшифровывает поле в C# с использованием RFC2898DeariveBytes . Я пытался разработать решение для кросс -платформного платформы, используя Cryptojs PBKDF2, чтобы написать метод расшифровки в JavaScript. Тем не менее, я не смог выяснить следующие 2 выпуска: < /p>
Я не могу получить клавиши, чтобы соответствовать < /li>
Я не могу понять, каким должен быть IV в Javascript. < /Li>
< /ul>
[b] Geworge < /strong> < /p>
. иметь большой контроль над этим, поскольку он поддерживает много устаревших систем) < /p>
private readonly RijndaelManaged _alg = new RijndaelManaged();
public EncryptionManager()
{
var secret = 'D2s1d_5$_t0t3||y_4c3$0m3!1!1!!';
var salt = 'o6805542kcM7c5';
var saltBytes = Encoding.ASCII.GetBytes(salt);
using (var keyDeriver = new Rfc2898DeriveBytes(secret, saltBytes))
{
_alg.Key = keyDeriver.GetBytes(_alg.KeySize / 8); // _alg.KeySize = 256
}
}
< /code>
код JS, который у меня есть для генерации ключей: < /p>
const secret = CryptoJS.enc.Utf8.parse('D2s1d_5$_t0t3||y_4c3$0m3!1!1!!');
// Encoding the Salt in from UTF8 to byte array
const salt = CryptoJS.enc.Utf8.parse('o6805542kcM7c5');
// Creating the key in PBKDF2 format to be used during the decryption
const key = CryptoJS.PBKDF2(secret.toString(CryptoJS.enc.Utf8), salt, {
keySize: 128 / 32,
iterations: 1000,
});
< /code>
Это в идеале должно работать в соответствии с моим исследованием, но ключи, полученные в обоих кодах, никогда не бывают одинаковыми. Я сгорел много полуночного масла, царапая голову над тем, что я делаю неправильно, но я не понимаю, почему.
дешифрование [/b]
Метод дешифрования в C# заключается в следующем:
public string Decrypt(string ciphertext)
{
var cipherTextBytes = Convert.FromBase64String(ciphertext);
var ivSize = BitConverter.ToInt32(cipherTextBytes, 0);
var iv = new byte[ivSize];
var offset = sizeof(int);
Array.Copy(cipherTextBytes, offset, iv, 0, ivSize);
offset += ivSize;
using (var msDecrypt = new MemoryStream(cipherTextBytes, offset, cipherTextBytes.Length - offset))
{
lock (_syncLock)
{
using (var decryptor = _alg.CreateDecryptor(_alg.Key, iv))
using (var decryptStream = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var reader = new StreamReader(decryptStream))
{
return reader.ReadToEnd();
}
}
}
}
< /code>
Мое решение для дешифрования в JS: < /p>
const decrypt = (encryptedData: string): string => {
// Enclosing the test to be decrypted in a CipherParams object as supported by the CryptoJS library
const cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(encryptedData),
});
// What should be the IV be here?
const iv = CryptoJS.enc.Hex.parse(encryptedData);
// Decrypting the string contained in cipherParams using the PBKDF2 key
const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {
mode: CryptoJS.mode.CBC,
// iv,
padding: CryptoJS.pad.Pkcs7,
});
decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
return decryptedText;
}
< /code>
Я предполагаю, что если бы я мог получить правильный ключ и IV, я мог бы решить это. Я много просмотрел для совместимых решений, но я не могу получить то, что я делаю неправильно.
Любая помощь была бы очень оценена.>
Подробнее здесь: [url]https://stackoverflow.com/questions/65041115/generate-rfc2898derivebytes-key-in-javascript-from-c-sharp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия