-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcryptographic_hashes.html
More file actions
149 lines (138 loc) · 7.61 KB
/
cryptographic_hashes.html
File metadata and controls
149 lines (138 loc) · 7.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Course on Practical Neuroimaging in Python — Practical neuroimaging analysis</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="author" title="About these documents" href="about.html" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="The git parable" href="git_parable.html" />
<link rel="prev" title="Choosing an editor" href="choosing_editor.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="git_parable.html" title="The git parable"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="choosing_editor.html" title="Choosing an editor"
accesskey="P">previous</a> |</li>
<big><big><big><li><a href="index.html">Home</a> | </li>
<li><a href="https://github.com/practical-neuroimaging/pna2015">Exercises</a> | </li>
<li><a href="https://calmail.berkeley.edu/manage/list/listinfo/practical_fmri@lists.berkeley.edu">Mailing list</a> | </li></big></big></big>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="cryptographic-hashes">
<h1>Cryptographic hashes<a class="headerlink" href="#cryptographic-hashes" title="Permalink to this headline">¶</a></h1>
<p>Git makes great use of <em>hashes</em> because hashes make excellent unique identifiers
for the contents of files.</p>
<p>For background on hashes : <a class="reference external" href="http://en.wikipedia.org/wiki/Cryptographic_hash_function">Wikipedia on hash
functions</a>.</p>
<p>A <em>hash</em> is the result of running a <em>hash function</em> over a block of
data. The hash is a fixed length string that is the <em>signature</em> of that
exact block of data. Let’s run this in Python:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">hashlib</span>
<span class="gp">>>> </span><span class="n">sha1_hash_function</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span>
<span class="gp">>>> </span><span class="n">message</span> <span class="o">=</span> <span class="s2">"git is a rude word in UK English"</span>
<span class="gp">>>> </span><span class="n">hash_value</span> <span class="o">=</span> <span class="n">sha1_hash_function</span><span class="p">(</span><span class="n">message</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="gp">>>> </span><span class="n">hash_value</span>
<span class="go">'fec41478c4f497c1d90fd28610f4272c78a6867e'</span>
</pre></div>
</div>
<p>Not too exciting so far. However, the rather magical nature of this
string is not yet apparent. Here’s the trick:</p>
<p>There is no practical way for you to find another <code class="docutils literal"><span class="pre">message</span></code> that
will give the same <code class="docutils literal"><span class="pre">hash_value</span></code></p>
<p>The <code class="docutils literal"><span class="pre">hash_value</span></code> then is (very nearly) completely unique to that set of bytes.</p>
<p>For example, a tiny change in the string makes the hash completely
different. Here I’ve just added a full stop at the end:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sha1_hash_function</span><span class="p">(</span><span class="s2">"git is a rude word in UK English."</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="go">'9e87add001f13aa79ed7b42a5effbfc60aa8584e'</span>
</pre></div>
</div>
<p>So, if you give me some data, and I calculate the hash value, and it
comes out as “fec41478c4f497c1d90fd28610f4272c78a6867e”, then I can be
very sure that the data you gave me was exactly the string “git is a
rude word in UK English”.</p>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="choosing_editor.html"
title="previous chapter">Choosing an editor</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="git_parable.html"
title="next chapter">The git parable</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/cryptographic_hashes.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="git_parable.html" title="The git parable"
>next</a> |</li>
<li class="right" >
<a href="choosing_editor.html" title="Choosing an editor"
>previous</a> |</li>
<big><big><big><li><a href="index.html">Home</a> | </li>
<li><a href="https://github.com/practical-neuroimaging/pna2015">Exercises</a> | </li>
<li><a href="https://calmail.berkeley.edu/manage/list/listinfo/practical_fmri@lists.berkeley.edu">Mailing list</a> | </li></big></big></big>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2013-2015, Matthew Brett and J-B Poline.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
</div>
</body>
</html>