Есть ли способ (однократного) шифрования DES чем-либо с использованием pyca / cryptography?
blockquote>Да, просто передайте 8-байтовый ключ в
cryptography.hazmat.primitives.ciphers.algorithms.TripleDES
. При этом будет использоваться один и тот же ключ для каждого преобразования DES в тройном DES.Triple-DES также известен как DES-EDE для шифрования, дешифрования и затем шифрования. Если вы используете один и тот же ключ для каждого из них, то одна из пар шифрования / дешифрования приведет к функции идентификации, оставив только один шифрованный DES.
Обратите внимание, что не все реализации тройного DES принимают один ключ (так как обычно присутствует один DES), но это делает:
Секретный ключ. Это должно быть в секрете. Либо
blockquote>64
,128
, либо192
битов. DES использует только56
,112
или168
бит ключа, поскольку в каждом компоненте ключа есть байт четности. В некоторых работах говорится, что существует до трех отдельных ключей, каждый из которых имеет длину56
битов, и их можно просто объединить для получения полного ключа., хотя я должен признать, что вам нужно понять, как работает triple-DES, чтобы разобраться в этом тексте.
Отметим также, что реализация DES-EDE для одного DES в настоящее время не оптимизирована, она будет выполнять все три операции, даже если две из них взаимно отменяют друг друга.
Да, целочисленная арифметика.
К раунду m до следующего несколько n используйте ((m+n-1)/n) *n
public static int RoundUp(int num, int multiple)
{
if (multiple == 0)
return 0;
int add = multiple / Math.Abs(multiple);
return ((num + multiple - add) / multiple)*multiple;
}
static void Main()
{
Console.WriteLine(RoundUp(5, -2));
Console.WriteLine(RoundUp(5, 2));
}
/* Output
* 4
* 6
*/
При использовании большого количества из них на относительно медленной платформе можно устранить умножение при помощи варианта:
t = m + n - 1; возвратитесь (t - (t % n));
Конечно, если можно ограничить Ваш несколько значениями 2^n, затем операция модуля может также быть удержана от использования в пользу ее логического эквивалента (обычно "и").
Кстати, функция "Сводки новостей", проиллюстрированная выше, серьезно испорчена и только округлит в меньшую сторону правильно когда {(m % n) == (n - 1)}; округление в меньшую сторону неявно для целочисленного деления и как таково, не требует компенсации.