Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

暗号化→複合化

はじめまして。

下記ソースで暗号化には成功したのですが、それを元に戻す処理をどのようにコーディングしていけばいいかわかりません。
わかる方がいらっしゃいましたら教えて頂けるようお願い致します。

サンプルソース.java

    /**
    * ハッシュ値を計算します
    * @param str ハッシュ値を計算する文字列
    * @return ハッシュ値
    */
    public String computeHash(String str){

        String result = "";

        try {
            //---------------------------------------
            //  ハッシュアルゴリズムを実装
            //  MessageDigest md = MessageDigest.getInstance("MD5");
            //---------------------------------------
            MessageDigest md = MessageDigest.getInstance("SHA");
            //---------------------------------------
            //ハッシュ値を計算
            //---------------------------------------
            md.update(str.getBytes());
            byte[] b = md.digest();
            StringBuffer sb = new StringBuffer();
            //-------------------------------------------
            //  計算されたハッシュ値のバイトデータを基数16の符号なし整数の文字列に変換
            //-------------------------------------------
            for (int i = 0; i < b.length; i++) {
                String hex = "";
                if(byte2int(b[i]) <= 0xf){
                    hex += "0";
                }
                hex += Integer.toHexString(byte2int(b[i]));
                sb.append(hex);
            }

            result = sb.toString();

        } catch (NoSuchAlgorithmException e) {
            // エラー処理
        }
        return result;
    }
    /**
    * byte型の整数値(-127〜128)を0〜255の正の整数値に変換する<BR>
    * @param b          byte型の整数値
    * @return           0〜255の正の整数値
    */
    private int byte2int(byte b) {
        if(b < 0) {
            return (int)b + 0x100;
        }
        return b;
    }

1

回答

95547

閲覧

1件の回答

評価

0

byte2intは、

((int)b) & 0xff

で良いかもです。

それはともかく、MD5は暗号化アルゴリズムではなく、ハッシュ値を得るアルゴリズムです。
ハッシュ値からは元のデータを復号できません。
データとともに送信することで、相手方でデータから同じ方法でハッシュ値を生成し、
ハッシュ値が等しいかどうかで、データの改竄がないことを確認するためのものです。

ついでに、「復号化」というのは厳密に言うと間違いで、対義語は

平文←→暗号
復号←→暗号化

になります。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。