Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа со строками и массивами типа Inyeger, как удобно с этим работать? 
V
    Опции темы
ЛунныйОборотень
Дата 10.12.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: 1
Всего: 1



столкнулся с такой проблемой в криптографии-нужно из файла считать строки а потом закодировать их и декодировать..
решаю проблему преобразованием строк в массив типа ИНТ и потом с ним работаю... при этом возникают проблемы с преобразованием и обратной загонкой цифр в формат строки.

есть ли более элегантное решение этой проблемы?(преобразование типов =то есть мы работаем со строками как с числами(коды букв) и при этом они как бы все таки строки)
приведу код программы

Код

package crypto;

/**
 *
 * @author 
 */
import java.io.*;
import java.math.*;
import java.lang.*;

public class crypto {
    static byte[] input=new byte[500]; // schityvaem massiv is faila
    static crypto r=new crypto();
    //------------------------------------------------------------------------------
    
    static int[] I_Kodir=new int[500]; // teper berem iz input[] po odnome
    static long[] I_Kodir1=new long[500];// simvoly i shiftyem i zapixivaem syda
    static int[] shift=new int[500];
        static int[] shift1=new int[500];
        long[] I_Decodir=new long[100];
        int k=5; // eto kluch(nado vvodit iz konsoli)
    int b=3;// to ge samoe
    static int n=26; // kolichestvo bukv v alfavite

    
    //-------------------------------------------------------------------------------
    static byte[] example=new byte[26];
    //---------
    /**
     * @param args
     * @throws IOException 
     */
    // 1. otkryt fail
    /*
     * vziat simvol i zashifrovat
     * po formule i1=((k*i+b))(mod 26)
     * gde k- kluch ,b-kluch,i-index po massivu simvolov teksta, mod 26- eto nado poschitat 
     * ety figny i podelit na 26 i VZIAT OSTATOK OT DELENIA
     
     1.a zapisat eto v vyxodnoi fail
     *
     */
    
    /*
     * 2. vziat vyxodnoi fail i po formule
     * 
     * i=[(i1-b)*X](mod n);
     * gde X=Y na predydyshem shage
     * Y=k^(-1);
     * a k naxodiat po rashirennomy algoritmy Evklida
     *    
     * 
     */
    
    public void encrypt() throws IOException
    {    
        FileInputStream f=new FileInputStream("input.txt");
                FileOutputStream f1=new FileOutputStream("output.txt");
                FileOutputStream f2 =new FileOutputStream("decod.txt");
        for(int n=0;n<10;n++)
        {
            //System.out.println((char)f.read());
            f.read(input); // zapisali v massiv
        }
        
        // teper shifruem
        
                
        for(int i=0;i<30;i++)
                {
                    
                
            //System.out.println((int)input[i]);
            I_Kodir[i]=(int)input[i];
            I_Kodir[i]=(5*input[i])+3%n; //???// zakodirovali ????
                   
                        while(I_Kodir[i]>122)
                        {
                            shift[i]=I_Kodir[i]-122;
                            I_Kodir[i]=97+shift[i];
                        }
                        while(I_Kodir[i]<97)
                        {
                            shift[i]=97-I_Kodir[i];
                            I_Kodir[i]=122-shift[i];
                        }
                        // nado proverit esli chisla vyxodiat iz intervala chisel alfavita 
            // to "zakoltsevat ego"
            
                }

        
        //----------------------------------------------------------------
        System.out.println("I_Kodir \t"+"input");
        for(int i=0;i<30;i++)
        {     f1.write(I_Kodir[i]);
                        I_Kodir1[i]=I_Kodir[i];
            System.out.println(I_Kodir1[i]+"\t"+input[i]);
                     //  f2.write((byte)I_Decodir);
                        //System.out.println(I_Kodir1[i]);
        }
        
        //----------------------------------------------------------------
        
    }
    public void decrypt(long[] ikod,long b1,long k2)
    {
        
                for(int i=0;i<30;i++)
                {
                    I_Decodir[i]=((I_Kodir1[i]-b1)*k2)%n;//*1%n;
                    System.out.println("I_Decodir=\t"+I_Decodir[i]);
                   // System.out.println(I_Kodir1[i]);
                    // не получается пока
                    
                }
    }
    
    
        
        void evclid(long a,long b,long x,long y,long d)
        {
            /* calculates a * *x + b * *y = gcd(a, b) = *d */
            long q,r,x1,x2,y1,y2;
            if (b == 0) {
            d = a;
            x = 1;
            y = 0;
            
            return;
            }
            x2 = 1;
            x1 = 0;
            y2 = 0;
            y1 = 1;
            
            while (b > 0) {

q = a / b;
r = a - q * b;

x = x2 - q * x1;
y = y2 - q * y1;

a = b;
b = r;

x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
            }    
        
        d = a;
        x = x2;
        y = y2;
        
        System.out.println("X="+x);
        System.out.println("Y=\t"+y);
        System.out.println("d=\t"+d);
         decrypt( I_Kodir1, b,y);
         if(26*x+b*y==1)
         {
             System.out.println("ok");
         }
         else System.out.println("no");
        }
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //r.proverkaIO(example);
        r.encrypt();
        long a = 26;
                long b = 5;// n
                long d=0;
                long x=0;
                long y=0;
                r.evclid(a, b, x, y, d);
               // long k1=b%n;  // доделать обратить внимание на b, k,k1
               // System.out.print(k1);
              // r.decrypt( I_Kodir1, b,5);
    //System.out.println(y);
               
        }

}




этот процесс можно видеть в функции криптования и дешифровки......
массивы I_Kodir[] I_Decodir[]

спасибо.
PM MAIL   Вверх
anonymouse
Дата 10.12.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 18.8.2004

Репутация: нет
Всего: 1



похоже Вам просто не хватает теории, посмотрите темы: Encryption, Digest, Base64, UTF-8

вот здесь найдете массу примеров: http://www.example-code.com/java/encryption.asp
--------------------
Много чего интересного...
PM MAIL   Вверх
ЛунныйОборотень
Дата 10.12.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: 1
Всего: 1



спасибо за ресурс!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.