SORU
15 Mart 2012, PERŞEMBE


Java ile farklı sonuçlar's digest karşı dış yarar

Basit bir Java sınıfı Windows Hesap makinesi dosya karma değerlerini oluşturmak için yazdım. Windows 7 Professional with SP1 kullanıyorum. Java 6.0.29 Java 7.0.03 denedim. Farklı birini alıyorum neden bana karma Java karşı (!) değerleri olabilir harici yardımcı ve/veya web siteleri? Her şey dış birbirleri ile maçları, Java farklı sonuçlar veriyor sadece.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.CRC32;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Checksum 
{
    private static int size = 65536;
    private static File calc = new File("C:/Windows/system32/calc.exe");

    /*
        C:\Windows\System32\calc.exe (verified via several different utilities)
        ----------------------------
        CRC-32b = 8D8F5F8E
        MD5     = 60B7C0FEAD45F2066E5B805A91F4F0FC
        SHA-1   = 9018A7D6CDBE859A430E8794E73381F77C840BE0
        SHA-256 = 80C10EE5F21F92F89CBC293A59D2FD4C01C7958AACAD15642558DB700943FA22
        SHA-384 = 551186C804C17B4CCDA07FD5FE83A32B48B4D173DAC3262F16489029894FC008A501B50AB9B53158B429031B043043D2
        SHA-512 = 68B9F9C00FC64DF946684CE81A72A2624F0FC07E07C0C8B3DB2FAE8C9C0415BD1B4A03AD7FFA96985AF0CC5E0410F6C5E29A30200EFFF21AB4B01369A3C59B58


        Results from this class
        -----------------------
        CRC-32  = 967E5DDE
        MD5     = 10E4A1D2132CCB5C6759F038CDB6F3C9
        SHA-1   = 42D36EEB2140441B48287B7CD30B38105986D68F
        SHA-256 = C6A91CBA00BF87CDB064C49ADAAC82255CBEC6FDD48FD21F9B3B96ABF019916B    
    */    

    public static void main(String[] args)throws Exception {
        Map<String, String> hashes = getFileHash(calc);
        for (Map.Entry<String, String> entry : hashes.entrySet()) {
            System.out.println(String.format("%-7s = %s", entry.getKey(), entry.getValue()));
        }
    }

    private static Map<String, String> getFileHash(File file) throws NoSuchAlgorithmException, IOException {
        Map<String, String> results = new LinkedHashMap<String, String>();

        if (file != null && file.exists()) {
            CRC32 crc32 = new CRC32();
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
            MessageDigest sha256 = MessageDigest.getInstance("SHA-256");

            FileInputStream fis = new FileInputStream(file);
            byte data[] = new byte[size];
            int len = 0;
            while ((len = fis.read(data)) != -1) {
                crc32.update(data, 0, len);
                md5.update(data, 0, len);
                sha1.update(data, 0, len);
                sha256.update(data, 0, len);
            }
            fis.close();

            results.put("CRC-32", toHex(crc32.getValue()));
            results.put(md5.getAlgorithm(), toHex(md5.digest()));
            results.put(sha1.getAlgorithm(), toHex(sha1.digest()));
            results.put(sha256.getAlgorithm(), toHex(sha256.digest()));
        }
        return results;
    }

    private static String toHex(byte[] bytes) {
        String result = "";
        if (bytes != null) {
            StringBuilder sb = new StringBuilder(bytes.length * 2);
            for (byte element : bytes) {
                if ((element & 0xff) < 0x10) {
                    sb.append("0");
                }
                sb.append(Long.toString(element & 0xff, 16));
            }
            result = sb.toString().toUpperCase();
        }
        return result;
    }

    private static String toHex(long value) {
        return Long.toHexString(value).toUpperCase();
    }

}

CEVAP
15 Mart 2012, PERŞEMBE


Anladım. Windows dosya sistemi farklı sistemin mimarisine bağlı olarak davranıyor. Bu 10* * - özellikle:

Ancak 32-bit sistem yolunda sabit kodlanmış ve çalışan 64-bit uygulamalar ne olacak Windows? Nasıl program kodunda değişiklik yapmadan yeni SysWOW64 klasörü bulmak olabilir, diye düşünebilirsiniz. Cevap öykünücüsü yönlendirir aramalar için System32 klasörüne SysWOW64 klasörü şeffaf bu yüzden bile klasörü sabit kodlu System32 klasörü (gibi C:\Windows\System32), öykünücüsü olacaktır emin olun SysWOW64 klasörü yerine kullanılır. System32 klasörü kullanan aynı kaynak kodu herhangi bir değişiklik olmadan 32-bit ve 64-bit program kodu için derlenmiş olabilir.

Başka bir yere calc.exe kopyalamayı deneyin... sonra aynı araçları tekrar çalıştırın. Aynı sonuç olarak Java alacaksın.Bir şeyhakkında Windows dosya sistemi vererek farklı veri araçları daha vermek için Java... eminim bu işle olmanın Windows dizin ve böylece muhtemelen ele "farklı".

Ayrıca, C ürettim#... ... bağlı olduğunu öğrendimkaçıyorsun sürecinin mimarisi. Burada örnek bir program:

using System;
using System.IO;
using System.Security.Cryptography;

class Test
{
    static void Main()
    {
        using (var md5 = MD5.Create())
        {
            string path = "c:/Windows/System32/Calc.exe";
            var bytes = md5.ComputeHash(File.ReadAllBytes(path));
            Console.WriteLine(BitConverter.ToString(bytes));
        }
    }
}

Ve burada bir konsol oturumu (eksi derleyici sohbet):

c:\users\jon\Test>csc /platform:x86 Test.cs    

c:\users\jon\Test>test
60-B7-C0-FE-AD-45-F2-06-6E-5B-80-5A-91-F4-F0-FC

c:\users\jon\Test>csc /platform:x64 Test.cs

c:\users\jon\Test>test
10-E4-A1-D2-13-2C-CB-5C-67-59-F0-38-CD-B6-F3-C9

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010