{"id":16296,"date":"2021-02-07T19:27:49","date_gmt":"2021-02-07T18:27:49","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=16296"},"modified":"2021-02-07T19:29:46","modified_gmt":"2021-02-07T18:29:46","slug":"mal-was-anderes-als-schnee-und-glatteis-salzen-mit-sha-256-in-java","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=16296","title":{"rendered":"Mal was anderes als Schnee und Glatteis: Salzen mit SHA-256 in Java"},"content":{"rendered":"<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-scaled.jpg\" alt=\"hash, bitcoin, \" width=\"2560\" height=\"1919\" class=\"aligncenter size-full wp-image-16297\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-scaled.jpg 2560w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-300x225.jpg 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-1024x768.jpg 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-768x576.jpg 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-1536x1151.jpg 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/02\/SHA-256-2048x1535.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Kryptografische Hashfunktionen k\u00f6nnen zur Integrit\u00e4tspr\u00fcfung verwendet werden, um \u00c4nderungen in Daten festzustellen. Bitcoin verwendet kryptografische Hashfunktionen sehr ausgiebig, um zu \u00fcberpr\u00fcfen, dass sich Daten nicht ge\u00e4ndert haben. Zum Beispiel wird immer ab und zu \u2013 durchschnittlich alle 10 Minuten \u2013 ein neuer Hash der gesamten Zahlungsgeschichte erzeugt. Wenn jemand versucht, diese Daten zu \u00e4ndern, wird dies sofort von jedem, der die Hashes \u00fcberpr\u00fcft, bemerkt.<\/p>\n<p>Grundlegenden Eigenschaften von Hash:<\/p>\n<p>-Gleiche Eingabedaten erzeugen den gleichen Hash.<br \/>\n-Leicht unterschiedliche Eingabedaten erzeugen sehr unterschiedliche Hashes.<br \/>\n-Der Hash hat stets eine feste L\u00e4nge. Bei SHA256 sind dies 256 Bits.<br \/>\n-Die Holzhammermethode Trial-and-Error ist der einzige bekannte Weg, einen Input zu finden, der einen bestimmten Hash erzeugt.<\/p>\n<p>Hier mal ein kleines Java Beispiel mit unterschiedlichen Libs und pur Java: &#8230;<!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\/**\r\n * Test von SHA-2 (von englisch secure hash algorithm, sicherer\r\n * Hash-Algorithmus) Hash.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class Start {\r\n\r\n\tprivate static String EINGABE = \"Der Text von dem der Hash gebildet wird. Er soll auch mal ein paar Umlaute enthalten wie \u00f6\u00fc oder \u00d6\u00dc\";\r\n\r\n\tpublic static void main(String[] args) throws Exception {\r\n\r\n\t\tSystem.out.println(\"Der SHA-256 Hash ist 32 Byte (2 HEX Zeichen * 32 = 64) lang, d.h. 64 Zeichen\");\r\n\r\n\t\t\/\/ mit Java 8\r\n\t\tMessageDigest digest = MessageDigest.getInstance(\"SHA-256\");\r\n\t\tbyte[] hashJava = digest.digest(EINGABE.getBytes(StandardCharsets.UTF_8));\r\n\r\n\t\tSystem.out.println(\"Der SHA-256 Hash mit Java java.security.MessageDigest           : \" + bytesToHex(hashJava));\r\n\r\n\t\t\/\/ mit Google Guava Lib\r\n\t\tString hashGuava = Hashing.sha256().hashString(EINGABE, StandardCharsets.UTF_8).toString();\r\n\t\tSystem.out.println(\"Der SHA-256 Hash mit Java com.google.guava                      : \" + hashGuava);\r\n\r\n\t\t\/\/ mit Apache Lib\r\n\t\tString hashApache = DigestUtils.sha256Hex(EINGABE);\r\n\t\tSystem.out.println(\"Der SHA-256 Hash mit org.apache.commons.codec.digest.DigestUtils: \" + hashApache);\r\n\t}<\/pre>\n<p>Das Ergebnis:<\/p>\n<pre>\r\nDer SHA-256 Hash ist 32 Byte (2 HEX Zeichen * 32 = 64) lang, d.h. 64 Zeichen\r\nDer SHA-256 Hash mit Java java.security.MessageDigest           : 9307f6730bb57a068c3662c775649c4fbadfb0ddf3d11c43e525259a43c1a150\r\nDer SHA-256 Hash mit Java com.google.guava                      : 9307f6730bb57a068c3662c775649c4fbadfb0ddf3d11c43e525259a43c1a150\r\nDer SHA-256 Hash mit org.apache.commons.codec.digest.DigestUtils: 9307f6730bb57a068c3662c775649c4fbadfb0ddf3d11c43e525259a43c1a150\r\n<\/pre>\n<p>Das ganze Testprojekt, kann von Bitbucket geklont werden mit:<\/p>\n<p>git clone https:\/\/itberater@bitbucket.org\/itberater\/twhash.git<\/p>\n<p>Und nicht vergessen, beim Passwort hashing, nicht das salzen f\u00fcr jeden User vergessen, da viele User die gleichen Passw\u00f6rter verwenden und auch weil Salz bei Glatteis hilf \ud83d\ude09 Oder gleich SSO von bekannten Diensten verwenden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kryptografische Hashfunktionen k\u00f6nnen zur Integrit\u00e4tspr\u00fcfung verwendet werden, um \u00c4nderungen in Daten festzustellen. Bitcoin verwendet kryptografische Hashfunktionen sehr ausgiebig, um zu \u00fcberpr\u00fcfen, dass sich Daten nicht ge\u00e4ndert haben. Zum Beispiel wird immer ab und zu \u2013 durchschnittlich alle 10 Minuten \u2013 ein neuer Hash der gesamten Zahlungsgeschichte erzeugt. Wenn jemand versucht, diese Daten zu \u00e4ndern, wird &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=16296\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eMal was anderes als Schnee und Glatteis: Salzen mit SHA-256 in Java\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4606,5,3163,1319],"tags":[112,4613,1183,325,4621,4617,1012,2178,4619,4620,4618,4614,4615,4616,176],"class_list":["post-16296","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-crypto","category-java","category-maven","category-sicherheit-2","tag-beispiel","tag-bitbucket","tag-bitcoin","tag-git","tag-glatteis","tag-haschen","tag-hash","tag-java","tag-salt","tag-salz","tag-salzen","tag-sha","tag-sha-2","tag-sha-256","tag-sicherheit"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16296"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16296\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16296"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}