Шифрование URL в Java

Я не знаю, нашли ли вы ответ на этот Алекс, но упомянутый вопрос / ответ в комментариях LDL дает ответ, представленный Шрикантом Инджарапу.

Вот ответ, на тот случай, если кто-то не захочет перейти к этой ссылке:

Если вы настроите таргетинг на ES5, добавьте «node_modules / typescript / lib / lib .es6.d.ts "в файл tsconfig.json:

blockquote>
 {    
   "compilerOptions": {
     "module": "commonjs",
     "target": "es5",
     "noImplicitAny": false,
     "outDir": "built",
     "rootDir": ".",
     "sourceMap": false
   },
   "files": [
     "helloworld.ts",
     "node_modules/typescript/lib/lib.es6.d.ts"
   ],
   "exclude": [
     "node_modules"
   ]
 }

EDIT

В моем приложении я использую webpack для создания своего приложения, и я все еще получить те же ошибки, которые выплевываются на консоли. Я в настоящее время ищу, чтобы исправить это и отчитаюсь с тем, что я нахожу.

7
задан vphomealone 23 September 2008 в 21:22
поделиться

7 ответов

Единственный способ сделать это должно использовать SSL/TLS (https). При использовании простого HTTP URL будет определенно представлен ясное.

3
ответ дан 7 December 2019 в 05:35
поделиться

API безопасности Java (http://java.sun.com/javase/technologies/security/) + кодирование URL

1
ответ дан 7 December 2019 в 05:35
поделиться

Если бы Вы действительно не можете использовать SSL, я предложил бы предобщий ключевой подход и добавление случайного iv.

Можно использовать любой достойный симметричный метод шифрования напр. AES с помощью предобщего ключа, который Вы передаете из полосы (электронная почта, позвоните и т.д.).

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

1
ответ дан 7 December 2019 в 05:35
поделиться

Это зависит от Вашей модели угрозы. Например, если Вы хотите защитить параметры, отправленные Вашим приложением Java на Ваш сервер от взломщика, у которого есть доступ к каналу передачи, необходимо рассмотреть общение с сервером через TLS/SSL (т.е. HTTPS в случае) и подобные. Если Вы хотите защитить параметры от взломщика, у которого есть доступ к машине, где Ваше клиентское выполнение приложения Java, то Вы находитесь в более глубокой проблеме.

1
ответ дан 7 December 2019 в 05:35
поделиться

Вы уверены, что разве подразумеваете, что URL не кодирует?

Кодирование доступно через java.net.URLEncoder.encode.

0
ответ дан 7 December 2019 в 05:35
поделиться

К сожалению, в java почти не заметить, что это просто :-), для этой простой и обычной задачи мне не удалось найти подготовленную библиотеку, в итоге я написал это ( это был источник ):

 import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEParameterSpec;

/**
 * An easy to use class to encrypt and decrypt a string. Just call the simplest
 * constructor and the needed methods.
 * 
 */

public class StringEncryptor {
private Cipher encryptCipher;
private Cipher decryptCipher;
private sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
private sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();

final private String charset = "UTF-8";
final private String defaultEncryptionPassword = "PAOSIDUFHQWER98234QWE378AHASDF93HASDF9238HAJSDF923";
final private byte[] defaultSalt = {

(byte) 0xa3, (byte) 0x21, (byte) 0x24, (byte) 0x2c,

(byte) 0xf2, (byte) 0xd2, (byte) 0x3e, (byte) 0x19 };

/**
 * The simplest constructor which will use a default password and salt to
 * encode the string.
 * 
 * @throws SecurityException
 */
public StringEncryptor() throws SecurityException {
    setupEncryptor(defaultEncryptionPassword, defaultSalt);
}

/**
 * Dynamic constructor to give own key and salt to it which going to be used
 * to encrypt and then decrypt the given string.
 * 
 * @param encryptionPassword
 * @param salt
 */
public StringEncryptor(String encryptionPassword, byte[] salt) {
    setupEncryptor(encryptionPassword, salt);
}

public void init(char[] pass, byte[] salt, int iterations) throws SecurityException {
    try {
        PBEParameterSpec ps = new javax.crypto.spec.PBEParameterSpec(salt, 20);

        SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");

        SecretKey k = kf.generateSecret(new javax.crypto.spec.PBEKeySpec(pass));

        encryptCipher = Cipher.getInstance("PBEWithMD5AndDES/CBC/PKCS5Padding");

        encryptCipher.init(Cipher.ENCRYPT_MODE, k, ps);

        decryptCipher = Cipher.getInstance("PBEWithMD5AndDES/CBC/PKCS5Padding");

        decryptCipher.init(Cipher.DECRYPT_MODE, k, ps);
    } catch (Exception e) {
        throw new SecurityException("Could not initialize CryptoLibrary: " + e.getMessage());
    }
}

/**
 * 
 * method to decrypt a string.
 * 
 * @param str
 *            Description of the Parameter
 * 
 * @return String the encrypted string.
 * 
 * @exception SecurityException
 *                Description of the Exception
 */

public synchronized String encrypt(String str) throws SecurityException {
    try {

        byte[] utf8 = str.getBytes(charset);

        byte[] enc = encryptCipher.doFinal(utf8);

        return URLEncoder.encode(encoder.encode(enc),charset);
    }

    catch (Exception e)

    {
        throw new SecurityException("Could not encrypt: " + e.getMessage());
    }
}

/**
 * 
 * method to encrypting a string.
 * 
 * @param str
 *            Description of the Parameter
 * 
 * @return String the encrypted string.
 * 
 * @exception SecurityException
 *                Description of the Exception
 */

public synchronized String decrypt(String str) throws SecurityException {
    try {

        byte[] dec = decoder.decodeBuffer(URLDecoder.decode(str,charset));
        byte[] utf8 = decryptCipher.doFinal(dec);

        return new String(utf8, charset);

    } catch (Exception e) {
        throw new SecurityException("Could not decrypt: " + e.getMessage());
    }
}

private void setupEncryptor(String defaultEncryptionPassword, byte[] salt) {

    java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());

    char[] pass = defaultEncryptionPassword.toCharArray();

    int iterations = 3;

    init(pass, salt, iterations);
}

}

2
ответ дан 7 December 2019 в 05:35
поделиться

Стандартный способ шифрования HTTP-трафика - использовать SSL. Однако даже по HTTPS URL-адрес и любые параметры в нем (например, запрос GET) будут отправлены в открытом виде. Вам нужно будет использовать SSL и выполнить POST-запрос, чтобы правильно зашифровать ваши данные.

Как указано в комментариях, параметры будут зашифрованы независимо от того, какой метод HTTP вы используете, если вы используете SSL-соединение.

0
ответ дан 7 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: