1Digest(3) User Contributed Perl Documentation Digest(3)
2
3
4
6 Digest - Modules that calculate message digests
7
9 $md5 = Digest->new("MD5");
10 $sha1 = Digest->new("SHA-1");
11 $sha256 = Digest->new("SHA-256");
12 $sha384 = Digest->new("SHA-384");
13 $sha512 = Digest->new("SHA-512");
14
15 $hmac = Digest->HMAC_MD5($key);
16
18 The "Digest::" modules calculate digests, also called "fingerprints" or
19 "hashes", of some data, called a message. The digest is (usually) some
20 small/fixed size string. The actual size of the digest depend of the
21 algorithm used. The message is simply a sequence of arbitrary bytes or
22 bits.
23
24 An important property of the digest algorithms is that the digest is
25 likely to change if the message change in some way. Another property
26 is that digest functions are one-way functions, that is it should be
27 hard to find a message that correspond to some given digest.
28 Algorithms differ in how "likely" and how "hard", as well as how
29 efficient they are to compute.
30
31 Note that the properties of the algorithms change over time, as the
32 algorithms are analyzed and machines grow faster. If your application
33 for instance depends on it being "impossible" to generate the same
34 digest for a different message it is wise to make it easy to plug in
35 stronger algorithms as the one used grow weaker. Using the interface
36 documented here should make it easy to change algorithms later.
37
38 All "Digest::" modules provide the same programming interface. A
39 functional interface for simple use, as well as an object oriented
40 interface that can handle messages of arbitrary length and which can
41 read files directly.
42
43 The digest can be delivered in three formats:
44
45 binary This is the most compact form, but it is not well suited for
46 printing or embedding in places that can't handle arbitrary
47 data.
48
49 hex A twice as long string of lowercase hexadecimal digits.
50
51 base64 A string of portable printable characters. This is the base64
52 encoded representation of the digest with any trailing padding
53 removed. The string will be about 30% longer than the binary
54 version. MIME::Base64 tells you more about this encoding.
55
56 The functional interface is simply importable functions with the same
57 name as the algorithm. The functions take the message as argument and
58 return the digest. Example:
59
60 use Digest::MD5 qw(md5);
61 $digest = md5($message);
62
63 There are also versions of the functions with "_hex" or "_base64"
64 appended to the name, which returns the digest in the indicated form.
65
67 The following methods are available for all "Digest::" modules:
68
69 $ctx = Digest->XXX($arg,...)
70 $ctx = Digest->new(XXX => $arg,...)
71 $ctx = Digest::XXX->new($arg,...)
72 The constructor returns some object that encapsulate the state of
73 the message-digest algorithm. You can add data to the object and
74 finally ask for the digest. The "XXX" should of course be replaced
75 by the proper name of the digest algorithm you want to use.
76
77 The two first forms are simply syntactic sugar which automatically
78 load the right module on first use. The second form allow you to
79 use algorithm names which contains letters which are not legal perl
80 identifiers, e.g. "SHA-1". If no implementation for the given
81 algorithm can be found, then an exception is raised.
82
83 To know what arguments (if any) the constructor takes (the
84 "$args,..." above) consult the docs for the specific digest
85 implementation.
86
87 If new() is called as an instance method (i.e. $ctx->new) it will
88 just reset the state the object to the state of a newly created
89 object. No new object is created in this case, and the return
90 value is the reference to the object (i.e. $ctx).
91
92 $other_ctx = $ctx->clone
93 The clone method creates a copy of the digest state object and
94 returns a reference to the copy.
95
96 $ctx->reset
97 This is just an alias for $ctx->new.
98
99 $ctx->add( $data )
100 $ctx->add( $chunk1, $chunk2, ... )
101 The string value of the $data provided as argument is appended to
102 the message we calculate the digest for. The return value is the
103 $ctx object itself.
104
105 If more arguments are provided then they are all appended to the
106 message, thus all these lines will have the same effect on the
107 state of the $ctx object:
108
109 $ctx->add("a"); $ctx->add("b"); $ctx->add("c");
110 $ctx->add("a")->add("b")->add("c");
111 $ctx->add("a", "b", "c");
112 $ctx->add("abc");
113
114 Most algorithms are only defined for strings of bytes and this
115 method might therefore croak if the provided arguments contain
116 chars with ordinal number above 255.
117
118 $ctx->addfile( $io_handle )
119 The $io_handle is read until EOF and the content is appended to the
120 message we calculate the digest for. The return value is the $ctx
121 object itself.
122
123 The addfile() method will croak() if it fails reading data for some
124 reason. If it croaks it is unpredictable what the state of the
125 $ctx object will be in. The addfile() method might have been able
126 to read the file partially before it failed. It is probably wise
127 to discard or reset the $ctx object if this occurs.
128
129 In most cases you want to make sure that the $io_handle is in
130 "binmode" before you pass it as argument to the addfile() method.
131
132 $ctx->add_bits( $data, $nbits )
133 $ctx->add_bits( $bitstring )
134 The add_bits() method is an alternative to add() that allow partial
135 bytes to be appended to the message. Most users can just ignore
136 this method since typical applications involve only whole-byte
137 data.
138
139 The two argument form of add_bits() will add the first $nbits bits
140 from $data. For the last potentially partial byte only the high
141 order "$nbits % 8" bits are used. If $nbits is greater than
142 "length($data) * 8", then this method would do the same as
143 "$ctx->add($data)".
144
145 The one argument form of add_bits() takes a $bitstring of "1" and
146 "0" chars as argument. It's a shorthand for
147 "$ctx->add_bits(pack("B*", $bitstring), length($bitstring))".
148
149 The return value is the $ctx object itself.
150
151 This example shows two calls that should have the same effect:
152
153 $ctx->add_bits("111100001010");
154 $ctx->add_bits("\xF0\xA0", 12);
155
156 Most digest algorithms are byte based and for these it is not
157 possible to add bits that are not a multiple of 8, and the
158 add_bits() method will croak if you try.
159
160 $ctx->digest
161 Return the binary digest for the message.
162
163 Note that the "digest" operation is effectively a destructive,
164 read-once operation. Once it has been performed, the $ctx object is
165 automatically "reset" and can be used to calculate another digest
166 value. Call $ctx->clone->digest if you want to calculate the
167 digest without resetting the digest state.
168
169 $ctx->hexdigest
170 Same as $ctx->digest, but will return the digest in hexadecimal
171 form.
172
173 $ctx->b64digest
174 Same as $ctx->digest, but will return the digest as a base64
175 encoded string without padding.
176
177 $ctx->base64_padded_digest
178 Same as $ctx->digest, but will return the digest as a base64
179 encoded string.
180
182 This table should give some indication on the relative speed of
183 different algorithms. It is sorted by throughput based on a benchmark
184 done with of some implementations of this API:
185
186 Algorithm Size Implementation MB/s
187
188 MD4 128 Digest::MD4 v1.3 165.0
189 MD5 128 Digest::MD5 v2.33 98.8
190 SHA-256 256 Digest::SHA2 v1.1.0 66.7
191 SHA-1 160 Digest::SHA v4.3.1 58.9
192 SHA-1 160 Digest::SHA1 v2.10 48.8
193 SHA-256 256 Digest::SHA v4.3.1 41.3
194 Haval-256 256 Digest::Haval256 v1.0.4 39.8
195 SHA-384 384 Digest::SHA2 v1.1.0 19.6
196 SHA-512 512 Digest::SHA2 v1.1.0 19.3
197 SHA-384 384 Digest::SHA v4.3.1 19.2
198 SHA-512 512 Digest::SHA v4.3.1 19.2
199 Whirlpool 512 Digest::Whirlpool v1.0.2 13.0
200 MD2 128 Digest::MD2 v2.03 9.5
201
202 Adler-32 32 Digest::Adler32 v0.03 1.3
203 CRC-16 16 Digest::CRC v0.05 1.1
204 CRC-32 32 Digest::CRC v0.05 1.1
205 MD5 128 Digest::Perl::MD5 v1.5 1.0
206 CRC-CCITT 16 Digest::CRC v0.05 0.8
207
208 These numbers was achieved Apr 2004 with ActivePerl-5.8.3 running under
209 Linux on a P4 2.8 GHz CPU. The last 5 entries differ by being pure
210 perl implementations of the algorithms, which explains why they are so
211 slow.
212
214 Digest::Adler32, Digest::CRC, Digest::Haval256, Digest::HMAC,
215 Digest::MD2, Digest::MD4, Digest::MD5, Digest::SHA, Digest::SHA1,
216 Digest::SHA2, Digest::Whirlpool
217
218 New digest implementations should consider subclassing from
219 Digest::base.
220
221 MIME::Base64
222
223 http://en.wikipedia.org/wiki/Cryptographic_hash_function
224
226 Gisle Aas <gisle@aas.no>
227
228 The "Digest::" interface is based on the interface originally developed
229 by Neil Winton for his "MD5" module.
230
231 This library is free software; you can redistribute it and/or modify it
232 under the same terms as Perl itself.
233
234 Copyright 1998-2006 Gisle Aas.
235 Copyright 1995,1996 Neil Winton.
236
237
238
239perl v5.36.0 2023-01-20 Digest(3)