Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
#1

Шифрование чисел - C++

09.09.2010, 08:27. Просмотров 2413. Ответов 14
Метки нет (Все метки)

Программа должна шифровать число следующим образом: заменять каждую цифру остатком от деления (цифра+7)/10. Затем написать программу дешифровки для получения исходных чисел. (Задачка взята собственно из книги Дейтела.) Первая часть затруднений не вызывает, а вот с дешифровкой не могу сообразить. Как из остатка можно получить исходное делимое? Диапазон чисел тут небольшой (получается от 7 до 16), поэтому делимое явно будет однозначным. А как это в формулу загнать-то? Спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2010, 08:27     Шифрование чисел
Посмотрите здесь:

Шифрование - C++
Как возможно проверить, насколько надежно шифрование?

шифрование - C++
помогите пожалуйста написать пргорамму!!! была бы очень благодрна!!! шифрование. один из методов шифрования называется...

Шифрование - C++
Создать выходной зашифрованный файл на основе входного. Шифрование файла выполняется по следующему правилу: в каждом слове строки первый...

Шифрование - C++
Привет всем:) особенно тем кто в этот день тратит свое время на программирование:) Помогите решить такую задачу. Есть целое число "1234"....

c++ шифрование - C++
Необходимо программно реализовать на языке C++ алгоритм шифра по Диффи – Хеллману с открытым ключом. Понятия не имею с чего начать....

Шифрование - C++
Собственно, вопрос не совсем по си++, но нашел это место оптимальным. Так вот, речь пойдет о шифровании. А точнее: стоит ли уповать на...

Шифрование - C++
Доброго времени суток, сегодня весь день сидел и пытался разобрать задачу. Задается натуральное число k и перестановка чисел 1, ... , k...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrrFer
Заблокирован
09.09.2010, 10:14     Шифрование чисел #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <sstream>
using std::stringstream;
int main (){
    stringstream strm;
    int a,b;
 
    cin>>a;
 
    strm<<a;
    a=0;
    while(1){
        if((b=strm.get())<0)
            break;
        cout<<(b=(b+7-'0')%10);
        (a*=10)+=b;
    }
    strm.clear();
    strm<<a;
    cout<<endl;
    while(1){
        if((b=strm.get())<0)
            break;
        cout<<(b=(b+3-'0')%10);
    }
    
    cin.get(),cin.get();
    return 0;
}
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 10:17     Шифрование чисел #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
У каждой цифры будет уникальный остаток.
Код
Цифра   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Остаток | 7 | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
rrrFer
Заблокирован
09.09.2010, 10:23     Шифрование чисел #4
silent_1991, угу и вычисляется он как (цифра+3)%10
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 10:25     Шифрование чисел #5
rrrFer,
Да, до этого я, как ни странно, догадался
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.09.2010, 09:03  [ТС]     Шифрование чисел #6
Цитата Сообщение от rrrFer Посмотреть сообщение
угу и вычисляется он как (цифра+3)%10
Да, именно эту формулу мне и надо было. Я до этого чего-то не догадался Большое спасибо!

Добавлено через 20 часов 42 минуты
Кстати, наткнулся ещё на одну проблему. Если исходное число начинается на 3, то эта тройка шифруется в 0 => теряется. И исходное число уже не восстановить, например 34567->01234->4567. Исправил так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main (){
        stringstream strm, tmp;
        int a,b;
 
        cin>>a;
 
        strm<<a;
        a=0;
        while(1){
                if((b=strm.get())<0)
                        break;
                cout<<(b=(b+7-'0')%10);
                tmp<<b;
 
        }
        cout<<endl;
        while(1){
                if((b=tmp.get())<0)
                        break;
                cout<<(b=(b+3-'0')%10);
        }
 
        cin.get(),cin.get();
        return 0;
}
Т.е. создал дополнительный stringstream, записываю зашифрованное число в него (вместо переменной a), а потом из него же восстанавливаю. Или может есть варианты лучше?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.09.2010, 15:20     Шифрование чисел #7
Цитата Сообщение от dihlofos Посмотреть сообщение
например 34567->01234->4567
Мне кажется это от того, что число 34567 просто не помещается в int. Либо используйте unsigned int, либо тип с большей вместительностью.
rrrFer
Заблокирован
10.09.2010, 15:27     Шифрование чисел #8
fasked, все помещается, но ноли в старших разрядах незначащие и не хранятся( 01234 )
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.09.2010, 15:28     Шифрование чисел #9
fasked, А это уже смотря какой компилятор. У меня #define INT_MAX 2147483647 /* maximum (signed) int value */
#define UINT_MAX 0xffffffff /* maximum unsigned int value */
Проверь так автор.
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <limits>
 
int main()
{
   std::cout<<std::numeric_limits<int>::max()<<'\n';
   return 0;
}
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.09.2010, 15:34  [ТС]     Шифрование чисел #10
Цитата Сообщение от fasked Посмотреть сообщение
Мне кажется это от того, что число 34567 просто не помещается в int. Либо используйте unsigned int, либо тип с большей вместительностью.
Да нет, не в этом дело, даже большие числа проходят. (до 2147483647, у меня билдер стоит). А вот, например, даже 34 - нет. Вообще любое число с тройки.
А разве незначащий ноль впереди числа вообще сохраняется? Вводим например какое-нибудь 00025, сохраняется же просто 25.


Не по теме:

Пост писал долго, rrrFer и Lavroff уже за меня всё сказали

ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.09.2010, 15:38     Шифрование чисел #11
Да.
При вводе 025=25
А в тексте программы 025=21 (восьмеричная)
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.09.2010, 13:52     Шифрование чисел #12
А почему бы не работать с массивом, в каждой ячейке которого и хранить соответствующую цифру числа? Тогда и разбивать число на цифры не придётся, вы сразу будете вводить его в массив.
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
11.09.2010, 14:59  [ТС]     Шифрование чисел #13
Да, конечно, можно и массивом. Просто понимаете, задачка взята чуть ли не из начала учебника. Предполагается, что студент не знает ничего ни про массивы, ни про потоки stringstream Т.е. решить её надо, используя только int переменные. А с ними 0 как раз и теряется. (Можно конечно замутить какую-нибудь вспомогательную переменную, где хранить число нулей, или что-нибудь ещё более извратное... но стоит ли выделываться)
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.09.2010, 15:02     Шифрование чисел #14
dihlofos,
Хорошо, можно посчитать количество разрядов в числе (скажем, оно равно n) и прибавить к числу 10^n. Тогда число из x1x1...xn превратится в 1x1x2...xn и 3 в начале исходного числа станет второй цифрой полученного числа и не потеряется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2010, 15:09     Шифрование чисел
Еще ссылки по теме:

Шифрование - C++
я написал код шифрования #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; main() { //~...

шифрование RC4 - C++
Делаю шифрование RC4, но почему то дешифрует неправильно, не могли бы подсказать почему? .h: #include &lt;fstream&gt; #include &lt;string&gt; ...

Шифрование файла - C++
Здравствуйте, я новичок в С++, мне бы хотелось написать программу : На пример у меня имеется блокнот с логинами\паролями, Программа...

Быстрое шифрование - C++
Народ добрый , день , такая задача решил делать курсач на тему криптография , вот первым делом буду использовать шифрование быстрым методом...

Некорректное шифрование - C++
Разработал программу которая будет шифровать текстовый файл, а потом его расшифровывать. Код функций я написал и программа даже работала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
11.09.2010, 15:09  [ТС]     Шифрование чисел #15
Ну да, как вариант. Спасибо
Yandex
Объявления
11.09.2010, 15:09     Шифрование чисел
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru