Применение Шифрования по методу RSA в Языке С++
Вопрос: Как взять БЛОК, на 10 ом системе работать или 2 ном, если 2 ом системе то какие функции есть в С++?
Ya ponimaiu pod blokom tekst, neskolko bukv, a to chto ni ponimaiu sprashuivaiu,
shifrovat po odnomu simvolu ---- eto proba.
Vam vopros:Kak vzyat ni po donomu simvoly, a neskolko bukvu srazu i prisvaivat odnoi peremennoi?
vy pomojete ponimat klass bitset, privodit odin primer bitseta?
bitset<24> textbits(0);//текст с битами
bitset<8> symbol(0);/*на переменную symbol выделяется 8 бит, с которыми можно поотдельности работать. (0) - значает все биты нулвые(конструктор)*/
char text[4]="asd";//блок, который в биты неоходимо перевести
symbol=text[0];// sуmbol присвоится первый символ в двоичном виде
//заполняем textbits
int i=0,j=0,k=0;
for (i=0;i<24;i++)
{
textbits=symbol[j];
if(j==7)
{
k++;
j=0;
if (k<4) symbol=text[k];// sуmbol присвоится символ в двоичном виде
}
else j++;
}
...
Буду благодарна за замечания по стилистике написанного кусочка. Очень хочу научиться грамотно писать.
bitset<24> textbits(0);//текст с битами
bitset<8> symbol(0);/*на переменную symbol выделяется 8 бит, с которыми можно поотдельности работать. (0) - значает все биты нулвые(конструктор)*/
char text[4]="asd";//блок, который в биты неоходимо перевести
symbol=text[0];// sуmbol присвоится первый символ в двоичном виде
//заполняем textbits
int i=0,j=0,k=0;
for (i=0;i<24;i++)
{
textbits=symbol[j];
if(j==7)
{
k++;
j=0;
if (k<4) symbol=text[k];// sуmbol присвоится символ в двоичном виде
}
else j++;
}
...
Буду благодарна за замечания по стилистике написанного кусочка. Очень хочу научиться грамотно писать.
А я так сделал:
...
bitset<24> textbits(0); bitset<8> symbol(0);
char text[4]="asd"; int i, k;
for (i=0;i<24;i++) {
k = i%8;
if(k==0) symbol = text[i/8];
textbits[ i ] = symbol[ k ];
}
...
Так простее, понятнее. Потом попробовал всякие примеры по битовые (присваивание, сравнение), но ещё вопрос: как выполнить арифметические операции(сложение, вычитание), есть готовые функции или мне придется написать код по разрядом, циклами?
Если нужна реализация блочного шифрования не через задний проход, а нормально, то найди книгу Брюса Шнайера - "Прикладная криптография". Там все написано, что ты должен знать, и исходники на чистом С есть.
Если диплом, то почитай "Михаэл Вельшенбах. Криптография на Си и С++ в действии". Там описано - как шифрование реализуется на уровне хорошиего программиста. Плюс описание алгоритмов, и ссылки на классику в виде 3-го тома Дональда Кнута "Искусство программирования".
Приведенный кусочек кода - всего лишь пример, как можно символьную строку перевести в биты. bitset удобен тем, что набор его функций позволяет оперировать целыми блоками битовой информации, любой длины. Никакого намёка на реализацию какого-либо алгоритма.
Книга Брюса Шнайера - "Прикладная криптография" мне тоже очень понравилась)), только с Михаэл Вельшенбах. "Криптография на Си и С++ в действии" не встречалась.:confused:
Только по-моему не актуально самому реализовывать алгоритмы - которые уже Бог знает сколько времени реализованы за нас.(я про криптоалгоритмы) скорее всего можно допустить какую-то "дыру" для атак. Уже есть целые библиотеки, протестированные и безопасные (относительно, конечно). Например, cryptoapi.h (библотека Ws). С её помощью можно реализовывать любые (во всяком случае большинство) крптоалгоритмы.
Вообще мне интересно, кто как обеспечивает безопасность своих систем??? Кто-нибудь поделиться??? или я сильно наивная?:o
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
ofstream fout("put.txt");
ifstream fin("put.txt");
char c;
unsigned char s;
fout<<char(26);
fin>>c;
s = c;
cout<<c<<" = "<<(int)c<<endl;
cout<<s<<" = "<<(int)s<<endl;
}
Смотрите пожалуйста здесь, консольном выходить -52 и 204; как вы видели я хочу увидет число 26! подскажите, как я могу получить 26?