-3

以下は、SHA 暗号化用に作成したコードです。しかし、これをコンパイルすると、例外が発生します

java.security.NoSuchAlgorithmException: SHA SecretKeyFactory が利用できません

これを解決するために誰か助けてください。実際には暗号化技術に精通していません。

コード :

public String encrypt(String password)
    {
        try
        {

            KeySpec ks=new PBEKeySpec(password.toCharArray());
            SecretKeyFactory skf=SecretKeyFactory.getInstance(algo);
            SecretKey key=skf.generateSecret(ks);
            MessageDigest md=MessageDigest.getInstance("SHA-256");
            md.update(password.getBytes());
            byte[] digest=md.digest();
            byte[] salt=Arrays.copyOf(digest, 16);
            AlgorithmParameterSpec aps=new PBEParameterSpec(salt, 20);
            Cipher cipher=Cipher.getInstance(algo);
            cipher.init(Cipher.ENCRYPT_MODE, key, aps);

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return password;
    }

    @Override
    public String decrypt(String password)
    {
        try
        {
            KeySpec ks=new PBEKeySpec(password.toCharArray());
            SecretKeyFactory skf=SecretKeyFactory.getInstance(algo);
            SecretKey key=skf.generateSecret(ks);
            MessageDigest md=MessageDigest.getInstance("SHA-256");
            md.update(password.getBytes());
            byte[] digest=md.digest();
            byte[] salt=Arrays.copyOf(digest, 16);
            AlgorithmParameterSpec aps=new PBEParameterSpec(salt, 20);
            Cipher cipher=Cipher.getInstance(algo);
            cipher.init(Cipher.DECRYPT_MODE, key, aps);

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return password;
    }
4

1 に答える 1

3

車輪の再発明に時間を無駄にしたくない場合は、いつでもorg.apache.commons. 具体的には、これを行う方法は次のとおりです。

String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password);

これをPOMに追加すると、準備完了です:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.7</version>
</dependency> 

これは失敗です: MessageDigest.getInstance("SHA-256");。使用可能な SHA256 ハッシュのデフォルトの実装はありません。decryptまた、 SHA2をどのように計画していますか? あなたの意図を理解できないかもしれませんが、ハッシュ アルゴリズムは元に戻せないように設計されています。

暗号化

私の知る限り、最良の暗号化(ハッシュ/可逆ではない)アルゴリズムはAESです。AESの使用方法に関する良い答えは次のとおりです。

AES および Base64 エンコードによる暗号化と復号化

于 2013-05-01T12:00:42.293 に答える