Я не крипто-парень, поэтому я знаю об этом почти одинаково. Я должен взаимодействовать с системой, использующей криптографию RSA. При использовании их ключей я сталкиваюсь с проблемой получения разных шифров для одного и того же ввода/ключа. Библиотека https://code.google.com/p/pajhome/source/browse/trunk/crypt/md5/rsa/RSA.js?r=133 и я с помощью поставщика Java BouncyCastle RSA следующим образом:Несоответствие между реализациями RSA
BigInteger e = new BigInteger("9d7aa162117a8a9610ed2ddea713d7b", 16);
BigInteger m = new BigInteger("c9869917572adbb60a2c30ddec2551f", 16);
RSAPublicKeySpec spec = new RSAPublicKeySpec(m, e);
KeyFactory keyFac = KeyFactory.getInstance("RSA", "BC");
PublicKey pubKey = keyFac.generatePublic(spec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
// UNENCRYPTED_LOGIN = "201211130215"
// UNECRYPTED_TYPE = "1"
byte[] login = cipher.doFinal(UNENCRYPTED_LOGIN.getBytes("ASCII"));
byte[] type = cipher.doFinal(UNENCRYPTED_TYPE.getBytes("ASCII"));
// login = 00d571a40ef7359b2e9e10b7c5dd621c
// should be 02f0cc389fb88e6b4aaa4e2477858ca9
// type = 0a5c2e176c81b23b2e1dd635f2427c0f
// it is correct
Попробуйте зашифровать что-то двумя цифрами, скажем «11» или «12» и посмотреть, существует ли расхождение. Если нет, продолжайте добавлять цифры до появления. Кажется, что алгоритм JS делает какую-то упаковку, которая, вероятно, не существует. – mikeazo
Он разбивается на несколько персонажей. От 0 до 9, вывод одинаков. –
Эти цифры и все остальное здесь довольно отрывочно. Модуль тривиально факторизуем (37 - фактор !!), а код javascript нескомментирован и трудно понять. Вы на самом деле не используете Bouncycastle, за исключением фабрики ключей, и я не понимаю, зачем вам Bouncycastle в любом случае. Вероятно, вам нужно будет получить экземпляр RSA с «NOPADDING», указанным для заполнения, а затем реализовать дополнение для соответствия javascript. Или просто используйте javascript самостоятельно и вообще пропустите java. –