& Ldquo; NoSuchAlgorithmException & Rdquo; для Simple KeyPairGenerator [дубликат]

Следуя ответу Даниэля Вассалло , вот версия, которая имеет дело с проблемой замыкания более простым способом.

Так как все маркеры будут иметь отдельный InfoWindow , и поскольку JavaScript не волнует, добавили ли вы дополнительные свойства к объекту, все, что вам нужно сделать, это добавить InfoWindow в свойства [] маркера , а затем вызвать .open() на InfoWindow от себя!

Редактирование: при наличии достаточного количества данных, pageload может занимать много времени, поэтому вместо создания InfoWindow с маркером конструкция должна произойти только тогда, когда это необходимо. Обратите внимание, что любые данные, используемые для создания InfoWindow , должны быть добавлены к маркеру как свойство (data). Также обратите внимание, что после первого события клика infoWindow будет сохраняться как свойство его маркера, поэтому браузеру не нужно постоянно восстанавливать.

var locations = [
  ['Bondi Beach', -33.890542, 151.274856, 4],
  ['Coogee Beach', -33.923036, 151.259052, 5],
  ['Cronulla Beach', -34.028249, 151.157507, 3],
  ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
  ['Maroubra Beach', -33.950198, 151.259302, 1]
];

var map = new google.maps.Map(document.getElementById('map'), {
  center: new google.maps.LatLng(-33.92, 151.25)
});

for (i = 0; i < locations.length; i++) {  
  marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
    map: map,
    data: {
      name: locations[i][0]
    }
  });
  marker.addListener('click', function() {
    if(!this.infoWindow) {
      this.infoWindow = new google.maps.InfoWindow({
        content: this.data.name;
      });
    }
    this.infoWindow.open(map,this);
  })
}

2
задан CodesInChaos 29 May 2012 в 17:18
поделиться

3 ответа

AES - симметричный алгоритм, поэтому использование KeyPairGenerator не поддерживается. Чтобы сгенерировать ключ с помощью AES, вы вызываете KeyGenerator

KeyGenerator kgen = KeyGenerator.getInstance("AES");
       kgen.init(128);  //set keysize, can be 128, 192, and 256

. Рассматривая остальную часть кода, похоже, что вы пытаетесь добиться асимметричного шифрования (поскольку вы вызываете getPublic() and getPrivate() и т. Д.), поэтому я советую вам перейти на использование RSA или любого другого асимметричного алгоритма, поддерживаемого java. Вам больше всего нужно будет заменить AES на RSA в ваших вызовах getInstance(); и, возможно, на тонкую настройку. Удачи

2
ответ дан John Snow 26 August 2018 в 02:28
поделиться

Как вы можете использовать генератор ключей для AES? AES - это алгоритм симметричного ключа. См. Ссылку . Это означает, что если вы зашифруете данные с помощью ключа «k», вам также придется расшифровать его, используя тот же ключ «k». Но когда вы создаете пару ключей, как следует из названия, генерируются два ключа, и если вы шифруете один из ключей, вы можете расшифровать только с помощью другого ключа. Это база для PKI . Если вы хотите использовать генератор ключей, используйте такой алгоритм, как "rsa" или "dsa" в методе getInstance(), например:

KeyPairGenerator keygen=KeyPairGenerator.getInstance("rsa");

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

0
ответ дан Ashwin 26 August 2018 в 02:28
поделиться

Насколько мне известно, AES является симметричным алгоритмом шифрования, то есть ему требуется только один ключ для шифрования / дешифрования.

Из JavaDoc of java.security.KeyPairGenerator:

Класс KeyPairGenerator используется для создания пар открытых и закрытых ключей.

Значение, которое должно использоваться для асимметричных алгоритмов шифрования . Для симметричных алгоритмов шифрования следует использовать javax.crypto.KeyGenerator.

Однако я советую просто подражать некоторому учебнику о том, как шифровать / дешифровать байтовый массив в Java, используя AES, например this one .

Он использует классы sun.misc.Base64Encoder / Base64Decoder для кодирования / декодирования байтового массива в / из String, однако вы можете пропустить этот шаг.

Надеемся, что это поможет

1
ответ дан lkamal 26 August 2018 в 02:28
поделиться
Другие вопросы по тегам:

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