অ্যান্ড্রয়েডে এমডি 5 হ্যাশিং


92

আমার একটি সাধারণ অ্যান্ড্রয়েড ক্লায়েন্ট রয়েছে যার জন্য একটি সাধারণ সি # এইচটিটিপি শ্রোতার সাথে 'কথা বলা' দরকার। আমি POST অনুরোধগুলিতে ব্যবহারকারীর নাম / পাসওয়ার্ড দিয়ে প্রমাণীকরণের একটি প্রাথমিক স্তর সরবরাহ করতে চাই।

এমডি 5 হ্যাশিং সি # তে তুচ্ছ এবং আমার প্রয়োজনের জন্য যথেষ্ট সুরক্ষা সরবরাহ করে তবে অ্যান্ড্রয়েডের শেষে কীভাবে এটি করবেন তা আমি খুঁজে পাচ্ছি না।

সম্পাদনা: এমডি 5 দুর্বলতা সম্পর্কে উত্থাপিত উদ্বেগের সমাধান করার জন্য - সি # সার্ভারটি আমার অ্যান্ড্রয়েড ক্লায়েন্টের ব্যবহারকারীদের পিসিতে চালিত হয়। অনেক ক্ষেত্রে, তারা নিজের ল্যানগুলিতে Wi-Fi ব্যবহার করে সার্ভারটি অ্যাক্সেস করবে তবে তাদের নিজস্ব ঝুঁকিতে, তারা ইন্টারনেট থেকে এটি অ্যাক্সেস করতে পছন্দ করতে পারে। এছাড়াও সার্ভারে পরিষেবাটির এমডি 5 এর জন্য একটি তৃতীয় পক্ষের অ্যাপ্লিকেশনটিতে পাস-থ্রুটি ব্যবহার করা দরকার আমার কোনও নিয়ন্ত্রণ নেই।


6
এমডি 5 ব্যবহার করবেন না। SHA512 ব্যবহার করুন।
স্ল্যাक्स 0

4
কেন? SHA512 এমডি 5 এর চেয়ে কঠিন নয়। আপনি এমডি 5 ব্যবহার করে উত্তরাধিকারী ক্লায়েন্টদের সাথে এখন থেকে পাঁচ বছর আটকাতে চান না।
স্ল্যাक्स

4
আমি আশা করি আপনি আপনার প্রোটোকলে একটি ননস ব্যবহার করছেন, যাতে আপনি রিপ্লে আক্রমণগুলি ফেলে দিতে পারেন।
011

4
@ নিক জোনসন: আপনার প্রশ্নের উত্তর দিতে আপনি কেন ইচ্ছাকৃতভাবে দুর্বল বিকল্পটি নির্বাচন করবেন? অন্য একটি প্রশ্নের সাথে ... আপনি কেন 16 মাস আগে পোস্ট করা প্রশ্নে মন্তব্য করার প্রয়োজন বোধ করবেন? তবে আপনি যদি সত্যিই জানতে চান (যদি আপনি নিজের উপরের স্ল্যাक्सের মন্তব্যটি দেখুন) তবে এটি ছিল আলফা স্টেজ কোড এবং পিসি শেষ (আমার দ্বারা লিখিত নয়) MD5 হ্যাশিং ব্যবহৃত হয়েছিল। প্রয়োজনীয়তা অতিরিক্ত জটিলতার সাথে জড়িত না করে একটি পাস-থ্রো দৃশ্যের জন্য ছিল। আমার কাছে তখন প্রায় 10 টি আলফা-স্টেজ পরীক্ষক ছিল যারা ঝুঁকিগুলি জানত। আমি প্রশ্ন জিজ্ঞাসা করার পর থেকে আরও জটিল সুরক্ষা অন্তর্ভুক্ত করা হয়েছে।
স্কোঙ্ক

4
...কি? না, এটি কেবল ভুল নয়, এটি বিপজ্জনকভাবে ভুল।
নিক জনসন

উত্তর:


232

আপনি ব্যবহার করতে পারেন এমন একটি বাস্তবায়ন এখানে দেওয়া হয়েছে (এর পরিবর্তে জাভা কনভেনশনগুলি - for:eachলুপের StringBuilderপরিবর্তে আরও বেশি ব্যবহারের জন্য আপডেট করা হয়েছে StringBuffer):

public static String md5(final String s) {
    final String MD5 = "MD5";
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest
                .getInstance(MD5);
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuilder hexString = new StringBuilder();
        for (byte aMessageDigest : messageDigest) {
            String h = Integer.toHexString(0xFF & aMessageDigest);
            while (h.length() < 2)
                h = "0" + h;
            hexString.append(h);
        }
        return hexString.toString();

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

যদিও এটি সুরক্ষার প্রাথমিক স্তরের (এমডি 5 কে ভাঙ্গা হিসাবে বিবেচনা করা হয় এবং সহজেই কাজে লাগানো যায় ) জড়িত সিস্টেমগুলির জন্য এটি প্রস্তাবিত নয় , তবে এটি কখনও কখনও বেসিক কাজের জন্য যথেষ্ট is


ধন্যবাদ যে কৌশলটি করবে। এই পর্যায়ে এমডি 5 কেন যথেষ্ট হবে তার জন্য আমার সম্পাদনা দেখুন।
স্কোনঙ্ক

7
এই নিচে আইএমওকে ভোট দিন যাতে নীচের আরও সঠিক উত্তরগুলি প্রকাশিত হবে।
আদম

4
0 নীচে উত্তর হিসাবে ক্যাটারড হয় না।
সোহেলআজিজ

নতুন জাভা স্ট্যান্ডার্ড ব্যবহারের জন্য আপডেট হয়েছে (এর জন্য: স্ট্রিংবিল্ডার প্রত্যেকটি)
লোশ্যাচ ২

4
এমন কোনও অ্যান্ড্রয়েড অপারেটিং সিস্টেম রয়েছে যা এমডি 5 বাস্তবায়িত হয়নি (ছোঁড়ার কারণ NoSuchAlgorithmException)?
ভিএসবি

51

গৃহীত উত্তরটি আমার জন্য অ্যান্ড্রয়েড ২.২-এ কাজ করে না। কেন জানি না, তবে এটি আমার কিছু শূন্য (0) "খাচ্ছিল"। অ্যাপাচি কমন্স অ্যান্ড্রয়েড ২.২ এও কাজ করেনি, কারণ এটি এমন পদ্ধতি ব্যবহার করে যা কেবলমাত্র অ্যান্ড্রয়েড ২.৩.এক্স থেকে শুরু করে সমর্থিত are এছাড়াও, আপনি যদি কেবল একটি স্ট্রিং এমডি 5 করতে চান তবে অ্যাপাচি কমন্স তার পক্ষে খুব জটিল। এটি থেকে কেবল একটি ছোট ফাংশন ব্যবহার করার জন্য কেন একটি পুরো লাইব্রেরি রাখা উচিত ...

অবশেষে আমি নীচের কোড স্নিপেট এখানে পেয়েছি যা আমার জন্য নিখুঁতভাবে কাজ করে। আমি আশা করি এটি কারও পক্ষে কার্যকর হবে ...

public String MD5(String md5) {
   try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes("UTF-8"));
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
       }
        return sb.toString();
    } catch (java.security.NoSuchAlgorithmException e) {
    } catch(UnsupportedEncodingException ex){
    }
    return null;
}

4
আমার জন্য কাজ করেছেন। আমি md5.getBytes ("UTF-8") পরিবর্তন করেছি । আমি এটা চেক করেছি: q4m'x68n6_YDB4ty8VC4 &} wqBtn ^ 68W উপরের কোড দিয়ে ফল 0c70bb931f03b75af1591f261eb77d0b , না c70bb931f03b75af1591f261eb77d0b । 0 স্থানে রয়েছে
ইনোয়

29

Androidsnippets.com কোড নির্ভরযোগ্যভাবে কাজ করে না কারণ 0 এর ফলস্বরূপ হ্যাশটি কেটে গেছে বলে মনে হচ্ছে।

একটি ভাল বাস্তবায়ন এখানে

public static String MD5_Hash(String s) {
    MessageDigest m = null;

    try {
            m = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
    }

    m.update(s.getBytes(),0,s.length());
    String hash = new BigInteger(1, m.digest()).toString(16);
    return hash;
}

এই ক্ষেত্রে, "এম" কি কখনও অ্যান্ড্রয়েডে বাতিল হতে পারে?
অ্যান্ড্রয়েড বিকাশকারী 15

4
@ Androiddeveloper আপনি পুরোপুরি ঠিক বলেছেন। ক্যাচ ব্লকটি এখানে দুর্বলভাবে প্রয়োগ করা হয়েছে, এখানে রিটার্নের স্টেটমেন্ট হওয়া দরকার বা যখন এম.প্যাডেট কল করা হবে তখন একটি নাল রেফারেন্স ত্রুটি হবে। এছাড়াও আমি নিশ্চিত নই তবে যদিও এটি স্বতন্ত্র বাইটে 0 এর স্ট্রিপটি না ফেলতে পারে তবে আমি মনে করি এটি এখনও পুরো 32 চর হ্যাশ-এ 0 এর শীর্ষস্থানীয় স্ট্রাইপ করতে পারে। টুস্ট্রিংয়ের পরিবর্তে (১ 16) আমি স্ট্রিং মনে করি For এছাড়াও আপনি উচ্চ বা নিম্ন ক্ষেত্রে হেক্সস চান কিনা তা চয়ন করতে পারেন (নিম্নের জন্য "% 032x")।
রশিম্প

4
এই সংস্করণটি ত্রুটিযুক্ত। যদি আপনার এমডি 5 "0" দিয়ে শুরু হয়, উত্পন্ন এমডি 5 এর শীর্ষস্থানীয় 0 থাকবে না দয়া করে এই সমাধানটি ব্যবহার করবেন না।
এলকুকো

21

যদি অ্যাপাচি কমন্স কোডেক ব্যবহারের বিকল্প হয় তবে এটি একটি সংক্ষিপ্ত বাস্তবায়ন হবে:

String md5Hex = new String(Hex.encodeHex(DigestUtils.md5(data)));

বা এসএএএ:

String shaHex= new String(Hex.encodeHex(DigestUtils.sha("textToHash")));

উপরের জন্য উত্স

দয়া করে লিঙ্কটি অনুসরণ করুন এবং সঠিক ব্যক্তিকে পুরষ্কার দেওয়ার জন্য তার সমাধানটি upvote করুন।


ম্যাভেন রেপো লিঙ্ক: https://mvnrepository.com/artifact/commons-codec/commons-codec

বর্তমান মাভেন নির্ভরতা (July জুলাই ২০১ 2016 হিসাবে):

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>

4
স্ট্যান্ডার্ড লাইব্রেরিতে ইতিমধ্যে বিদ্যমান এমন কোনও API এর জন্য আপনি কোনও বাহ্যিক গ্রন্থাগার কেন ব্যবহার করবেন?
m0skit0

12

ডাইজেস্টটিলগুলি ব্যবহার করে উপরের সমাধানটি আমার পক্ষে কার্যকর হয়নি। আমার অ্যাপাচি কমনের সংস্করণে (২০১৩ সালের সর্বশেষতম) এর মতো কোনও শ্রেণি নেই।

আমি এখানে একটি ব্লগে আরও একটি সমাধান পেয়েছি । এটি নিখুঁতভাবে কাজ করে এবং অ্যাপাচি কমনের প্রয়োজন নেই। এটি উপরের স্বীকৃত উত্তরে কোডের চেয়ে কিছুটা ছোট দেখায়।

public static String getMd5Hash(String input) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        String md5 = number.toString(16);

        while (md5.length() < 32)
            md5 = "0" + md5;

        return md5;
    } catch (NoSuchAlgorithmException e) {
        Log.e("MD5", e.getLocalizedMessage());
        return null;
    }
}

আপনার এই আমদানিগুলির প্রয়োজন হবে:

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

এমডি 5 হ্যাশটির আইডি জানা গুরুত্বপূর্ণ 32 দৈর্ঘ্যের দৈর্ঘ্য বা তার চেয়ে কম, আপনাকে ধন্যবাদ!
পেরেনেস

4
শেষের কয়েকটি লাইন সম্ভবত কেবলমাত্র এর সাথে প্রতিস্থাপন করা যেতে পারে: স্ট্রিং.টায় ফরম্যাট ("% 032X", সংখ্যা); অন্যথায় আমি এই উত্তরটি সত্যিই পছন্দ করি।
rsimp

10

এটি উপরের আন্দ্রানিক এবং ডেন ডিলিমারস্কি উত্তরের সামান্য প্রকরণ, তবে এটি কিছুটা সংক্ষিপ্ত এবং এর জন্য কোনও বিটওয়াইজিক যুক্তির প্রয়োজন নেই doesn't পরিবর্তে এটি String.formatবাইটগুলি দুটি অক্ষর হেক্সাডেসিমাল স্ট্রিংগুলিতে রূপান্তর করতে অন্তর্নির্মিত পদ্ধতিটি ব্যবহার করে (0 টি স্ট্রিপ করে না)। সাধারণত আমি কেবল তাদের উত্তরগুলিতে মন্তব্য করব তবে তা করার মতো খ্যাতি আমার নেই।

public static String md5(String input) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");

        StringBuilder hexString = new StringBuilder();
        for (byte digestByte : md.digest(input.getBytes()))
            hexString.append(String.format("%02X", digestByte));

        return hexString.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}

আপনি যদি এর পরিবর্তে ছোট আকারের স্ট্রিংটি ফিরে আসতে চান তবে কেবল এতে পরিবর্তন %02Xকরুন %02x

সম্পাদনা: wzbozon এর উত্তরের মতো বিগইন্টিজার ব্যবহার করে, আপনি উত্তরটি আরও সংক্ষিপ্ত করে তুলতে পারেন:

public static String md5(String input) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        BigInteger md5Data = new BigInteger(1, md.digest(input.getBytes()));
        return String.Format("%032X", md5Data);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}

4

আমি কোটলিনে একটি সাধারণ লাইব্রেরি তৈরি করেছি।

রুট build.gradle এ যুক্ত করুন

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

অ্যাপ বিল্ড.gradle এ at

implementation 'com.github.1AboveAll:Hasher:-SNAPSHOT'

ব্যবহার

কোটলিনে

val ob = Hasher()

তারপরে হ্যাশ () পদ্ধতিটি ব্যবহার করুন

ob.hash("String_You_Want_To_Encode",Hasher.MD5)

ob.hash("String_You_Want_To_Encode",Hasher.SHA_1)

এটি MD5 এবং SHA-1 সম্মানজনকভাবে ফিরে আসবে।

গ্রন্থাগার সম্পর্কে আরও

https://github.com/ihimanshurawat/ হাশর


3

এখানে @Andranik উত্তর থেকে কোটলিন সংস্করণ। আমাদের পরিবর্তন getBytesকরা দরকারtoByteArray (চরসেট ইউটিএফ -8 যোগ করার দরকার নেই কারণ এর ডিফল্ট অক্ষরটি toByteArrayইউটিএফ -8 হ'ল) ​​এবং অ্যারে [i] সংখ্যায় কাস্ট করতে হবে

fun String.md5(): String? {
    try {
        val md = MessageDigest.getInstance("MD5")
        val array = md.digest(this.toByteArray())
        val sb = StringBuffer()
        for (i in array.indices) {
            sb.append(Integer.toHexString(array[i].toInt() and 0xFF or 0x100).substring(1, 3))
        }
        return sb.toString()
    } catch (e: java.security.NoSuchAlgorithmException) {
    } catch (ex: UnsupportedEncodingException) {
    }
    return null
}

আশা করি এটি সাহায্য করবে


1

আমাদের এমভিসি অ্যাপ্লিকেশনটিতে আমরা দীর্ঘ পরম তৈরি করি rate

using System.Security.Cryptography;
using System.Text;
    ...
    public static string getMD5(long id)
    {
        // convert
        string result = (id ^ long.MaxValue).ToString("X") + "-ANY-TEXT";
        using (MD5 md5Hash = MD5.Create())
        {
            // Convert the input string to a byte array and compute the hash. 
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(result));

            // Create a new Stringbuilder to collect the bytes and create a string.
            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
                sBuilder.Append(data[i].ToString("x2"));

            // Return the hexadecimal string. 
            result = sBuilder.ToString().ToUpper();
        }

        return result;
    }

এবং অ্যান্ড্রয়েড অ্যাপ্লিকেশনে একই (তখন অ্যান্ড্রানিককে সহায়তা করে)

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
...
public String getIdHash(long id){
    String hash = null;
    long intId = id ^ Long.MAX_VALUE;
    String md5 = String.format("%X-ANY-TEXT", intId);
    try {
        MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] arr = md.digest(md5.getBytes());
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < arr.length; ++i)
            sb.append(Integer.toHexString((arr[i] & 0xFF) | 0x100).substring(1,3));

        hash = sb.toString();
    } catch (NoSuchAlgorithmException e) {
        Log.e("MD5", e.getMessage());
    }

    return hash.toUpperCase();
}

1

আপনি এমডি 5 পেতে চান এমন স্ট্রিং দিয়ে আমাকে এমডি 5 দেওয়ার জন্য আমি নীচের পদ্ধতিটি ব্যবহার করেছি

public static String getMd5Key(String password) {

//        String password = "12131123984335";

        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());

            byte byteData[] = md.digest();

            //convert the byte to hex format method 1
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }

            System.out.println("Digest(in hex format):: " + sb.toString());

            //convert the byte to hex format method 2
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
                String hex = Integer.toHexString(0xff & byteData[i]);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            System.out.println("Digest(in hex format):: " + hexString.toString());

            return hexString.toString();

        } catch (Exception e) {
            // TODO: handle exception
        }

        return "";
}

1

দয়া করে SHA-512 ব্যবহার করুন, MD5 নিরাপত্তাহীন

public static String getSHA512SecurePassword(String passwordToHash) {
    String generatedPassword = null;
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-512");
        md.update("everybreathyoutake".getBytes());
        byte[] bytes = md.digest(passwordToHash.getBytes());
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
        }
        generatedPassword = sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return generatedPassword;
}

0

MD5 কিছুটা পুরানো, SHA-1 একটি ভাল অ্যালগরিদম, এখানে একটি উদাহরণ রয়েছে

( এছাড়াও তারা যেমন পোস্টে নোট করে, জাভা এটি নিজস্ব নিজস্বভাবে পরিচালনা করে, কোনও অ্যান্ড্রয়েড নির্দিষ্ট কোড নেই ))


4
না - আমি এই প্রশ্নটি জানুয়ারী ২০১১ (১৯ মাস আগে) জিজ্ঞাসা করার সময় এমডি 5-র বিকল্প চাইনি এবং আমি নিশ্চিত নই কেন আপনি এই মুহুর্তে আমার প্রশ্নের জবাব দেওয়ার প্রয়োজন অনুভব করলেন কেন?
স্কোঙ্ক

21
@ স্কনক আমি প্রতিক্রিয়া জানিয়েছি কারণ এটি স্ট্যাকওভারফ্লোয়ের পিছনে সাধারণ ধারণা। সত্যতা কত দিন পরে আসুক না কেন, যারা প্রশ্নটি পরে আসতে পারে তাদের জন্য সর্বদা আরও ভাল উত্তর পাওয়ার চেষ্টা করুন। SHA-1 এর পরামর্শ দেওয়ার জন্য, আমার জানার কোনও উপায় ছিল না যে আপনি বিশেষত SHA-1 এর বিপক্ষে ছিলেন, তবে আরও অনেকেই তা হবেনা, তাই আবার এটি ভবিষ্যতে অন্যান্য লোকদেরও সহায়তা করতে পারে এবং এটি পরিচালনা করতে পারে আরও আধুনিক অ্যালগরিদমের কাছে।
আদম

4
আমি একক পরিস্থিতি নিয়ে ভাবতে পারি না যেখানে এমডি 5 একটি খারাপ পছন্দ তবে SHA1 ভাল one আপনার যদি সংঘর্ষের প্রতিরোধের প্রয়োজন হয় তবে আপনার SHA2 দরকার SHA1 নয়। আপনার যদি পাসওয়ার্ডগুলি হ্যাশ করে তবে আপনার বিসিক্রিপ্ট বা পিবিকেডিএফ 2 দরকার। অথবা ওপির ক্ষেত্রে যথাযথ সমাধান সম্ভবত এসএসএল।
কোডসইনচওস

4
@ অ্যাডাম এটি উত্তর নয় এটি একটি মন্তব্য।
আন্তজি

0

আসলেই অপ্রয়োজনীয় টেক্সএক্স () রূপান্তরটি অন্যান্য পরামর্শগুলিতে বিরাজ করে।

private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();

public static String md5string(String s) {
    return toHex(md5plain(s));
}

public static byte[] md5plain(String s) {
    final String MD5 = "MD5";
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest.getInstance(MD5);
        digest.update(s.getBytes());
        return digest.digest();
    } catch (NoSuchAlgorithmException e) {
        // never happens
        e.printStackTrace();
        return null;
    }
}

public static String toHex(byte[] buf) {
    char[] hexChars = new char[buf.length * 2];
    int v;
    for (int i = 0; i < buf.length; i++) {
        v = buf[i] & 0xFF;
        hexChars[i * 2] = HEX_ARRAY[v >>> 4];
        hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0F];
    }
    return new String(hexChars);
}

উত্তরটি "উন্নত" টুহেক্স সম্পর্কে যখন কোয়েস্ট এমডি 5 সম্পর্কে থাকে যেমন এটি অ-প্রতিক্রিয়াশীল। দ্রষ্টব্য: ডোনাল্ড নুথ আসল সমস্যাটি হ'ল প্রোগ্রামাররা ভুল জায়গাগুলিতে এবং ভুল সময়ে দক্ষতার বিষয়ে চিন্তা করতে অনেক বেশি সময় ব্যয় করেছে; অকালীন অপটিমাইজেশন হ'ল প্রোগ্রামিংয়ে সমস্ত মন্দ (বা এর বেশিরভাগ অংশে) এর মূলে।
zaph

0

এটি আমার জন্য নিখুঁতভাবে কাজ করছে, আমি এটি তালিকাভুক্ত অ্যারেতে MD5 পাওয়ার জন্য ব্যবহার করেছি (তারপরে এটি JSON অবজেক্টে রূপান্তর করুন), তবে আপনার যদি কেবল এটি আপনার ডেটাতে প্রয়োগ করার প্রয়োজন হয়। টাইপ ফর্ম্যাট, আপনার সাথে JsonObject প্রতিস্থাপন।

বিশেষ করে পাইথন MD5 প্রয়োগের সাথে যদি আপনার কোনও মিল নেই তবে এটি ব্যবহার করুন!

private static String md5(List<AccelerationSensor> sensor) {

    Gson gson= new Gson();
    byte[] JsonObject = new byte[0];
    try {
        JsonObject = gson.toJson(sensor).getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    MessageDigest m = null;

    try {
        m = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    byte[] thedigest = m.digest(JsonObject);
    String hash = String.format("%032x", new BigInteger(1, thedigest));
    return hash;


}

0

দরকারী কোটলিন এক্সটেনশন ফাংশন উদাহরণ

fun String.toMD5(): String {
    val bytes = MessageDigest.getInstance("MD5").digest(this.toByteArray())
    return bytes.toHex()
}

fun ByteArray.toHex(): String {
    return joinToString("") { "%02x".format(it) }
}

-1

স্কেলা ভাষার জন্য সরবরাহিত সমাধান (কিছুটা ছোট):

def getMd5(content: Array[Byte]) =
    try {
        val md = MessageDigest.getInstance("MD5")
        val bytes = md.digest(content)
        bytes.map(b => Integer.toHexString((b + 0x100) % 0x100)).mkString
    } catch {
        case ex: Throwable => null
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.