検索
ホームページJava&#&ベースJavaで暗号化する方法

Javaで暗号化する方法

Dec 05, 2019 pm 03:34 PM
java暗号化

Javaで暗号化する方法

1. MD5 (メッセージ ダイジェスト アルゴリズム) 暗号化アルゴリズム

は、暗号化のみが可能で復号化はできない一方向暗号化アルゴリズムです。

/**
     * MD5简单加密
     * @param content 加密内容
     * @return String
     */
    public static String md5Encrypt(final String content) {

        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance(ALGORITHM_MD5);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
//        md5.update(text.getBytes());
        //digest()最后返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
        //BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
        BigInteger digest = new BigInteger(md5.digest(content.getBytes()));
        //32位
        return digest.toString(16);
    }

2, BASE64 暗号化/復号化

は通常、バイナリ データの暗号化に使用されます。例

/**
     * base64加密
     * @param content 待加密内容
     * @return byte[]
     */
    public static byte[] base64Encrypt(final String content) {
        return Base64.getEncoder().encode(content.getBytes());
    }

    /**
     * base64解密
     * @param encoderContent 已加密内容
     * @return byte[]
     */
    public static byte[] base64Decrypt(final byte[] encoderContent) {
        return Base64.getDecoder().decode(encoderContent);
    }

3,DES(データ暗号化)標準) 対称暗号化/復号化

データ暗号化標準アルゴリズム。BASE64 との最も明らかな違いは、暗号化と復号化の両方に使用される作業キーがあり、キーが必要であることです。少なくとも 8 文字の長さの文字列。例

/**
     * DES加密
     * @param key 秘钥key
     * @param content 待加密内容
     * @return byte[]
     */
    public static byte[] DESEncrypt(final String key, final String content) {
        return processCipher(content.getBytes(), getSecretKey(key), Cipher.ENCRYPT_MODE , ALGORITHM_DES);
    }

    /**
     * DES解密
     * @param key 秘钥key
     * @param encoderContent 已加密内容
     * @return byte[]
     */
    public static byte[] DESDecrypt(final String key, final byte[] encoderContent) {
        return processCipher(encoderContent, getSecretKey(key), Cipher.DECRYPT_MODE, ALGORITHM_DES);
    }

4、RSA 非対称暗号化/復号化

非対称暗号化アルゴリズムの代表的なもので、暗号化と暗号化の両方が可能、復号化できます。 DES などの対称暗号化アルゴリズムとの明らかな違いは、暗号化と復号化に使用されるキーが異なることです。 RSA アルゴリズムを使用すると、キーが十分に長い (通常は 1024 ビットが必要) 限り、暗号化された情報を解読することはできません。例

/**
     * RSA加密
     * @param content 待加密内容
     * @return byte[]
     */
    public static byte[] RSAEncrypt(final String content) {
        return processCipher(content.getBytes(), keyPair.getPrivate(), Cipher.ENCRYPT_MODE , ALGORITHM_RSA);
    }

    /**
     * RSA解密
     * @param encoderContent 已加密内容
     * @return byte[]
     */
    public static byte[] RSADecrypt(final byte[] encoderContent) {
        return processCipher(encoderContent, keyPair.getPublic(), Cipher.DECRYPT_MODE, ALGORITHM_RSA);
    }

5、SHA (セキュア ハッシュ アルゴリズム、安全なハッシュ アルゴリズム)

デジタル署名および暗号化アプリケーションのその他の重要なツールは、電子ビジネスやその他の情報で広く使用されています。セキュリティ フィールド、例

/**
     * SHA加密
     * @param content 待加密内容
     * @return String
     */
    public static String SHAEncrypt(final String content) {
        try {
            MessageDigest sha = MessageDigest.getInstance(ALGORITHM_SHA);
            byte[] sha_byte = sha.digest(content.getBytes());
            StringBuffer hexValue = new StringBuffer();
            for (byte b : sha_byte) {
                //将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。
                String toHexString = Integer.toHexString(b & 0xff);
                hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString);
            }
            return hexValue.toString();

//            StringBuffer hexValue2 = new StringBuffer();
//            for (int i = 0; i < sha_byte.length; i++) {
//                int val = ((int) sha_byte[i]) & 0xff;
//                if (val < 16) {
//                    hexValue2.append("0");
//                }
//                hexValue2.append(Integer.toHexString(val));
//            }
//            return hexValue2.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
       return "";
    }

6、HMAC (ハッシュ メッセージ認証コード、ハッシュ メッセージ認証コード)

キーを使用して固定サイズの小さなデータ チャンクを生成します。 MAC として知られ、メッセージに追加されて送信されます。受信者は送信者と共有したキーを使用して認証と認証を行います。例

/**
     * HMAC加密
     * @param key 给定秘钥key
     * @param content 待加密内容
     * @return String
     */
    public static byte[] HMACEncrypt(final String key, final String content) {
        try {
            SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_MAC);
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            //初始化mac
            mac.init(secretKey);
            return mac.doFinal(content.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

テスト コード:

public static void main(String[] args) {
        //md5简单加密
        String text = "i am text";
        System.out.println(EnDecoderUtil.md5Encrypt(text));

        //base64进行加密解密,通常用作对二进制数据进行加密
        byte[] base64Encrypt = EnDecoderUtil.base64Encrypt("123456789");
        String toHexString = HexUtils.toHexString(base64Encrypt);
        System.out.println(toHexString);
        byte[] base64Decrypt = EnDecoderUtil.base64Decrypt(base64Encrypt);
        System.out.println(new String(base64Decrypt));

        //DES对称加密/解密
        //要求key至少长度为8个字符
        String key = "123456789";
        //加密
        byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, "Hello, DES");
        System.out.println(Base64.getEncoder().encodeToString(encode_bytes));
        //解密
        byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes);
        System.out.println(new String(decode_bytes));

        //RSA
        //数据使用私钥加密
        byte[] en_byte = EnDecoderUtil.RSAEncrypt("Hi, RSA");
        System.out.println(Base64.getEncoder().encodeToString(en_byte));

        //用户使用公钥解密
        byte[] de_byte = EnDecoderUtil.RSADecrypt(en_byte);
        System.out.println(new String(de_byte));

        //服务器根据私钥和加密数据生成数字签名
        byte[] sign_byte = EnDecoderUtil.getSignature(en_byte);
        System.out.println(Base64.getEncoder().encodeToString(sign_byte));

        //用户根据公钥、加密数据验证数据是否被修改过
        boolean verify_result = EnDecoderUtil.verifySignature(en_byte, sign_byte);
        System.out.println(verify_result);

        //SHA
        String sha = EnDecoderUtil.SHAEncrypt("Hi, RSA");
        System.out.println(sha);

        //HMAC
        byte[] mac_bytes = EnDecoderUtil.HMACEncrypt(key, "Hi, HMAC");
        System.out.println(HexUtils.toHexString(mac_bytes));
    }

Java の詳細については、Java 基本チュートリアルを参照してください。 ### カラム。

以上がJavaで暗号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java(シリアル、パラレル、CMS、G1、ZGC)のごみ収集アルゴリズムは何ですか?Java(シリアル、パラレル、CMS、G1、ZGC)のごみ収集アルゴリズムは何ですか?Mar 14, 2025 pm 05:06 PM

この記事では、さまざまなJava Garbage Collectionアルゴリズム(シリアル、パラレル、CMS、G1、ZGC)、そのパフォーマンスへの影響、および大きなヒープを持つアプリケーションの適合性について説明します。

Java Virtual Machine(JVM)とは何ですか?内部でどのように機能しますか?Java Virtual Machine(JVM)とは何ですか?内部でどのように機能しますか?Mar 14, 2025 pm 05:05 PM

この記事では、Java Virtual Machine(JVM)について説明し、さまざまなプラットフォームでJavaプログラムを実行する際の役割について詳しく説明しています。 JVMの内部プロセス、主要コンポーネント、メモリ管理、ガベージコレクション、およびパフォーマンスの最適化について説明します

JavaScriptを使用したスクリプトにJavaのナショーンエンジンを使用するにはどうすればよいですか?JavaScriptを使用したスクリプトにJavaのナショーンエンジンを使用するにはどうすればよいですか?Mar 14, 2025 pm 05:00 PM

Javaのナショーンエンジンは、Javaアプリ内でJavaScriptスクリプトを可能にします。重要な手順には、ナショーンのセットアップ、スクリプトの管理、パフォーマンスの最適化が含まれます。主な問題には、ナショーンのdeprecによるセキュリティ、記憶管理、将来の互換性が含まれます

自動リソース管理にJavaのリソース付きステートメントを使用するにはどうすればよいですか?自動リソース管理にJavaのリソース付きステートメントを使用するにはどうすればよいですか?Mar 14, 2025 pm 04:59 PM

Javaのリソースでの試行は、ファイルストリームやデータベース接続などのリソースを自動的に閉じることでリソース管理を簡素化し、コードの読みやすさと保守性を向上させます。

Javaの酵素を使用して固定値のセットを表すにはどうすればよいですか?Javaの酵素を使用して固定値のセットを表すにはどうすればよいですか?Mar 14, 2025 pm 04:57 PM

Java Enumsは、固定された値のセットを表し、カスタムメソッドとコンストラクターを介してタイプの安全性、読みやすさ、および追加の機能を提供します。それらはコード組織を強化し、効率的なバリューハンドリングのためにスイッチステートメントで使用できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。