2013-08-26 2 views
0

Я пытаюсь сделать шифрование с использованием SHA1 и частного ключа в JDK 1.6.0_35.Шифрование с использованием SHA1 и частного ключа в JDK 6

Но я получаю следующее исключение:

Исключение в нити "основной" java.security.NoSuchAlgorithmException: Не удается найти поставщика поддержки SHA1

тот же код работает для AES. Вот код:

public class ExecuteEncryptDecryptSample { 
     private static String method="SHA1"; 
     public static SecretKeySpec getKeySpec() throws IOException, NoSuchAlgorithmException { 
      byte[] bytes = new byte[16]; 
      File f = new File("sample_aes_key"); 
     SecretKey key = null; 
     SecretKeySpec spec = null; 
     if (f.exists()) { 
      new FileInputStream(f).read(bytes); 
     } else { 
      //KeyGenerator kgen = KeyGenerator.getInstance("SHA1");//PBKDF2WithHmacSHA1 
      KeyGenerator kgen = KeyGenerator.getInstance(method); 
      kgen.init(256); 
      key = kgen.generateKey(); 
      bytes = key.getEncoded(); 
      new FileOutputStream(f).write(bytes); 

     } 
     spec = new SecretKeySpec(bytes,method); 
     return spec; 
    } 
    public static void encrypt(String text) throws Exception { 
     SecretKeySpec spec = getKeySpec(); 
     Cipher cipher = Cipher.getInstance(method); 
     cipher.init(Cipher.ENCRYPT_MODE, spec); 
     BASE64Encoder enc = new BASE64Encoder(); 
     System.out.println(enc.encode(cipher.doFinal(text.getBytes()))); 
    } 

    public static void main(String[] args) throws Exception { 
     String text = "1234000156237828282873773"; 
     //Security security; 
     //security.getProviders(); 
     System.out.println(); 
     encrypt(text); 
    } 
} 

Есть ли какой-либо провайдер для SHA1 в jdk 6 ..?

Любая помощь будет высоко оценена.

Спасибо.

+0

Нет такой вещи, как шифрование с SHA- 1. Вы имеете в виду хеширование? – EJP

ответ

-2

Попробуйте перечислить все записи хранилища ключей, похоже, что SHA отсутствует в хранилище ключей, тогда как AES. Если его нет, попробуйте добавить значение в хранилище ключей и повторите тест.

+1

SHA - точнее SHA-1 - алгоритм хеширования. Это не ключ и не может присутствовать в каком-либо хранилище ключей (я не вижу хранилище ключей в вопросе, возможно, вы имели в виду провайдера?) –

+0

Может ли u plz использовать простой Java-код, который шифрует строку с использованием base64 и SHA1 , Я пробовал так, как вы сказали, но я не получаю требуемый результат. –

1

SHA-1 - это безопасный алгоритм хеширования. Это не ключевая функция вывода, даже если она иногда используется как одна. Поэтому, хотя вы можете использовать MessageDigest с алгоритмом "SHA-1", вы не можете использовать KeyGenerator с "SHA-1".

Если вы хотите сгенерировать ключи по причинам совместимости, вы можете использовать MessageDigest с "SHA-1" и взять первые байты вывода (столько, сколько необходимо для создания ключа). После этого вы можете использовать, например. SecretKeySpec(firstBytes, "AES") или SecretKeyFactory для ключей 3DES.

+0

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

+1

SHA1 - это безопасный алгоритм хеширования, он также не является шифром. Поэтому вы не можете шифровать SHA1 (ну, если вы не превратите его в потоковый шифр, но это, вероятно, не то, что вы имели в виду). И я не могу показать код, если не понимаю, чего вы пытаетесь достичь. –

+1

@HimanshuSingh Что говорит owlstead, просто поставлено, что вы пытаетесь найти кнопку стартера на своем велосипеде;) SHA1 не является алгоритмом шифрования, поэтому вы не можете его зашифровать. Вы можете * хэш * с ним, но это улица с односторонним движением, то есть вы не сможете ее расшифровать (или, если хотите, хэш *, если на то пошло). –

0

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

javax.crypto.Mac

(не MessageDigest) и алгоритм будет "HMACSHA1" нет ("SHA1"). Конечно, это много догадок, к сожалению, у меня нет моего хрустального шара со мной сегодня, поэтому я могу ошибаться. (Например, это также может быть ужасным злоупотреблением криптовыми терминами и означать, что вы должны хэш с SHA1 и подписываться с RSA, где, конечно, использование SHA1 больше не будет подходящим.)

Смежные вопросы