Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2011, 17:35   #1
RedScreenOfLife
Пользователь
 
Аватар для RedScreenOfLife
 
Регистрация: 12.07.2010
Сообщений: 45
Вопрос Шифрование

Есть БД, которая находится на сервере. Есть интерфейс(написан на джава), который находится где то на другом компе. Есть пара представлений(view) которые, прежде чем выполнится, шифруют инфу и после этого отправляют ее на другой комп...Вопрос: как расшифровать инфу на том другом компе?(само собой, конечно, никаких дополнительных запросов на БД не должно быть, иначе шифрование трафика будет пустым занятием).
Может есть какие то средства дешифровки в джава?

ЗЫ: СУБД MySQL, а шифрую при помощи аes_encrypt

ЗЗЫ: вообще требуется обычная передача данных от сервера клиенту, но данные должны быть зашифрована..если есть альтернативы как это сделать - расскажите пожалуйста

Последний раз редактировалось RedScreenOfLife; 19.06.2011 в 17:39.
RedScreenOfLife вне форума Ответить с цитированием
Старый 26.06.2011, 16:20   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

можете поискать информацию по теме data encryption standart. В интернете есть реализации этого стандарта на java. Можете использовать этот класс-обертку. Здесь 2 стат метода один шифрует, второй дешифрует. Чтобы второй метод возвращал результат, зашифрованный первым, нужно чтобы ключи шифрования (pbeKeySpec ) были одинаковые и в том и в другом методе(также как и sault , count ) Можно шифровать на клиенте, расшифровывать на сервере и наоборот
Код:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

  
public class DES{
	
	
	public static  byte[] encrypt(byte[] data){
	PBEKeySpec pbeKeySpec;
    PBEParameterSpec pbeParamSpec;
    SecretKeyFactory keyFac = null;

    // Salt
    byte[] salt = {
        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
    };

    // Iteration count
    int count = 20;

    // Create PBE parameter set
    pbeParamSpec = new PBEParameterSpec(salt, count);


    pbeKeySpec = new PBEKeySpec(new char[]{'1', '2', '3'});
    try {
		keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
	    SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
	    // Create PBE Cipher
	    Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
	    // Initialize PBE Cipher with key and parameters
	    pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);

	    // Encrypt the cleartext
	    byte[] cipherdata = pbeCipher.doFinal(data);
	    

	    return cipherdata;
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

		return null;
	}
	
	public static byte[] decrypt(byte[] data)
	{
		PBEKeySpec pbeKeySpec;
	    PBEParameterSpec pbeParamSpec;
	    SecretKeyFactory keyFac = null;

	    // Salt
	    byte[] salt = {
	        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
	        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
	    };

	    // Iteration count
	    int count = 20;

	    // Create PBE parameter set
	    pbeParamSpec = new PBEParameterSpec(salt, count);


	    pbeKeySpec = new PBEKeySpec(new char[]{'1', '2', '3'});
	    try {
			keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
		    SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
		    // Create PBE Cipher
		    Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
		    // Initialize PBE Cipher with key and parameters
		    pbeCipher.init(Cipher.DECRYPT_MODE, pbeKey, pbeParamSpec);

		    // Encrypt the cleartext
		    byte[] cipherdata = pbeCipher.doFinal(data);

		    return cipherdata;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

			return null;
	}
	

}

// на клиенте
String vasia = "Вася";
byte[] enc = DES.encrypt(vasia.getBytes());  	

...
/* Здесь идет передача шифрованного потока данных 
от клиента к серверу
*/


// на сервере
String decrypted_vasia =  new String( DES.decrypt(enc));
System.out.println(decrypted_vasia); //Вася
sashonk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование Gregor Общие вопросы Delphi 1 04.12.2010 00:14
Шифрование на С Jasper92 Общие вопросы C/C++ 1 23.12.2009 10:05
шифрование на С# innei Помощь студентам 0 08.04.2009 22:00