{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,17]],"date-time":"2025-11-17T21:37:18Z","timestamp":1763415438023,"version":"3.41.0"},"reference-count":30,"publisher":"Association for Computing Machinery (ACM)","issue":"3","license":[{"start":{"date-parts":[[2018,7,17]],"date-time":"2018-07-17T00:00:00Z","timestamp":1531785600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/501100000038","name":"Natural Sciences and Engineering Research Council of Canada","doi-asserted-by":"crossref","award":["261437"],"award-info":[{"award-number":["261437"]}],"id":[{"id":"10.13039\/501100000038","id-type":"DOI","asserted-by":"crossref"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Web"],"published-print":{"date-parts":[[2018,8,31]]},"abstract":"<jats:p>Web developers use base64 formats to include images, fonts, sounds, and other resources directly inside HTML, JavaScript, JSON, and XML files. We estimate that billions of base64 messages are decoded every day. We are motivated to improve the efficiency of base64 encoding and decoding. Compared to state-of-the-art implementations, we multiply the speeds of both the encoding (\u2248 10 \u00d70) and the decoding (\u2248 7 \u00d7). We achieve these good results by using the single-instruction-multiple-data instructions available on recent Intel processors (AVX2). Our accelerated software abides by the specification and reports errors when encountering characters outside of the base64 set. It is available online as free software under a liberal license.<\/jats:p>","DOI":"10.1145\/3132709","type":"journal-article","created":{"date-parts":[[2018,7,17]],"date-time":"2018-07-17T12:45:12Z","timestamp":1531831512000},"page":"1-26","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":15,"title":["Faster Base64 Encoding and Decoding Using AVX2 Instructions"],"prefix":"10.1145","volume":"12","author":[{"given":"Wojciech","family":"Mu\u0142a","sequence":"first","affiliation":[{"name":"Universit\u00e9 du Qu\u00e9bec (TELUQ)"}]},{"given":"Daniel","family":"Lemire","sequence":"additional","affiliation":[{"name":"Universit\u00e9 du Qu\u00e9bec (TELUQ), Montreal (Quebec), Canada"}]}],"member":"320","published-online":{"date-parts":[[2018,7,17]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Amazon 2015. Amazon SimpleDB. Retrieved from http:\/\/docs.aws.amazon.com\/AmazonSimpleDB\/latest\/DeveloperGuide\/Welcome.html.  Amazon 2015. Amazon SimpleDB. Retrieved from http:\/\/docs.aws.amazon.com\/AmazonSimpleDB\/latest\/DeveloperGuide\/Welcome.html."},{"key":"e_1_2_1_2_1","unstructured":"Amazon 2017. Amazon DynamoDB. Retrieved from http:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/developerguide\/Introduction.html.  Amazon 2017. Amazon DynamoDB. Retrieved from http:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/developerguide\/Introduction.html."},{"key":"e_1_2_1_4_1","unstructured":"David Calhoun. 2011. When to base64 encode images (and when not to). Retrieved from http:\/\/davidbcalhoun.com\/2011\/when-to-base64-encode-images-and-when-not-to\/.  David Calhoun. 2011. When to base64 encode images (and when not to). Retrieved from http:\/\/davidbcalhoun.com\/2011\/when-to-base64-encode-images-and-when-not-to\/."},{"key":"e_1_2_1_5_1","unstructured":"Hanson Char. 2014. A fast and correct base 64 codec. Retrieved from https:\/\/aws.amazon.com\/blogs\/developer\/a-fast-and-correct-base-64-codec\/.  Hanson Char. 2014. A fast and correct base 64 codec. Retrieved from https:\/\/aws.amazon.com\/blogs\/developer\/a-fast-and-correct-base-64-codec\/."},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3121050.3121086"},{"key":"e_1_2_1_7_1","unstructured":"Mark Davis. 2012. Unicode over 60 percent of the web. Retrieved from https:\/\/googleblog.blogspot.ca\/2012\/02\/unicode-over-60-percent-of-web.html.  Mark Davis. 2012. Unicode over 60 percent of the web. Retrieved from https:\/\/googleblog.blogspot.ca\/2012\/02\/unicode-over-60-percent-of-web.html."},{"key":"e_1_2_1_8_1","unstructured":"Elastic 2017. Elasticsearch reference-Binary datatype. Retrieved from https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/binary.html.  Elastic 2017. Elasticsearch reference-Binary datatype. Retrieved from https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/binary.html."},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2568058.2568063"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/2492007.2492024"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.17487\/RFC2616"},{"key":"e_1_2_1_12_1","volume-title":"Instruction Tables: Lists of Instruction Latencies, Throughputs and Micro-operation Breakdowns for Intel, AMD and VIA CPUs. Technical Report","author":"Fog Agner","year":"2016","unstructured":"Agner Fog . 2016 . Instruction Tables: Lists of Instruction Latencies, Throughputs and Micro-operation Breakdowns for Intel, AMD and VIA CPUs. Technical Report . Copenhagen University College of Engineering , Copenhagen, Denmark . Retrieved from http:\/\/www.agner.org\/optimize\/instruction_tables.pdf. Agner Fog. 2016. Instruction Tables: Lists of Instruction Latencies, Throughputs and Micro-operation Breakdowns for Intel, AMD and VIA CPUs. Technical Report. Copenhagen University College of Engineering, Copenhagen, Denmark. Retrieved from http:\/\/www.agner.org\/optimize\/instruction_tables.pdf."},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.17487\/RFC2045"},{"key":"e_1_2_1_14_1","unstructured":"Nick Galbreath. 2016. Fast c-string transformations. Retrieved from https:\/\/github.com\/client9\/stringencoders.  Nick Galbreath. 2016. Fast c-string transformations. Retrieved from https:\/\/github.com\/client9\/stringencoders."},{"key":"e_1_2_1_15_1","unstructured":"Ian Hickson. 2016. Web storage. Retrieved from https:\/\/www.w3.org\/TR\/webstorage\/.  Ian Hickson. 2016. Web storage. Retrieved from https:\/\/www.w3.org\/TR\/webstorage\/."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2487788.2487797"},{"key":"e_1_2_1_17_1","doi-asserted-by":"crossref","unstructured":"Michael B. Jones John Bradley and Nat Sakimura. 2015. JSON web signature (JWS). Retrieved from https:\/\/tools.ietf.org\/html\/rfc7515.  Michael B. Jones John Bradley and Nat Sakimura. 2015. JSON web signature (JWS). Retrieved from https:\/\/tools.ietf.org\/html\/rfc7515.","DOI":"10.17487\/RFC7515"},{"key":"e_1_2_1_18_1","doi-asserted-by":"crossref","unstructured":"Simon Josefsson. 2006. The base16 base32 and base64 data encodings. Retrieved from https:\/\/tools.ietf.org\/html\/rfc4648.  Simon Josefsson. 2006. The base16 base32 and base64 data encodings. Retrieved from https:\/\/tools.ietf.org\/html\/rfc4648.","DOI":"10.17487\/rfc4648"},{"key":"e_1_2_1_19_1","unstructured":"Alfred Klomp. 2014a. Fast base64 encoding\/decoding with SSE vectorization. Retrieved from http:\/\/www.alfredklomp.com\/programming\/sse-base64\/.  Alfred Klomp. 2014a. Fast base64 encoding\/decoding with SSE vectorization. Retrieved from http:\/\/www.alfredklomp.com\/programming\/sse-base64\/."},{"key":"e_1_2_1_20_1","unstructured":"Alfred Klomp. 2014b. Fast base64 stream encoder\/decoder in C99 with SIMD acceleration. Retrieved from https:\/\/github.com\/aklomp\/base64.  Alfred Klomp. 2014b. Fast base64 stream encoder\/decoder in C99 with SIMD acceleration. Retrieved from https:\/\/github.com\/aklomp\/base64."},{"key":"e_1_2_1_21_1","unstructured":"Nick Kopp. 2013. Base64 encoding on a GPU. Retrieved from https:\/\/www.codeproject.com\/Articles\/276993\/Base-Encoding-on-a-GPU.  Nick Kopp. 2013. Base64 encoding on a GPU. Retrieved from https:\/\/www.codeproject.com\/Articles\/276993\/Base-Encoding-on-a-GPU."},{"key":"e_1_2_1_22_1","doi-asserted-by":"crossref","unstructured":"John Linn. 1993. Privacy enhancement for internet electronic mail: Part I: Message encryption and authentication procedures. Retrieved from https:\/\/tools.ietf.org\/html\/rfc1421.  John Linn. 1993. Privacy enhancement for internet electronic mail: Part I: Message encryption and authentication procedures. Retrieved from https:\/\/tools.ietf.org\/html\/rfc1421.","DOI":"10.17487\/rfc1421"},{"key":"e_1_2_1_23_1","doi-asserted-by":"crossref","unstructured":"Larry Masinter. 1998. The \u201cdata\u201d URL scheme. Retrieved from https:\/\/tools.ietf.org\/html\/rfc2397.  Larry Masinter. 1998. The \u201cdata\u201d URL scheme. Retrieved from https:\/\/tools.ietf.org\/html\/rfc2397.","DOI":"10.17487\/rfc2397"},{"key":"e_1_2_1_24_1","unstructured":"Microsoft 2017. XML data (SQL server)-Use the binary base64 option. Retrieved from https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/binary.html.  Microsoft 2017. XML data (SQL server)-Use the binary base64 option. Retrieved from https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/binary.html."},{"key":"e_1_2_1_25_1","unstructured":"MongoDB 2017. MongoDB extended JSON. Retrieved from https:\/\/docs.mongodb.com\/manual\/reference\/mongodb-extended-json\/.  MongoDB 2017. MongoDB extended JSON. Retrieved from https:\/\/docs.mongodb.com\/manual\/reference\/mongodb-extended-json\/."},{"volume-title":"Client-side Performance Profiling of JavaScript for Web Applications. Master\u2019s thesis","author":"N\u00e4gele Thomas","key":"e_1_2_1_26_1","unstructured":"Thomas N\u00e4gele . 2015. Client-side Performance Profiling of JavaScript for Web Applications. Master\u2019s thesis . Radboud University Nijmegen , The Netherlands . Thomas N\u00e4gele. 2015. Client-side Performance Profiling of JavaScript for Web Applications. Master\u2019s thesis. Radboud University Nijmegen, The Netherlands."},{"volume-title":"How to Benchmark Code Execution Times on Intel IA-32 and IA-64 Instruction Set Architectures","author":"Paoloni Gabriele","key":"e_1_2_1_27_1","unstructured":"Gabriele Paoloni . 2010. How to Benchmark Code Execution Times on Intel IA-32 and IA-64 Instruction Set Architectures . Intel Corporation , Santa Clara, CA . Gabriele Paoloni. 2010. How to Benchmark Code Execution Times on Intel IA-32 and IA-64 Instruction Set Architectures. Intel Corporation, Santa Clara, CA."},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3032970.3032982"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-38898-4_14"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/2512938.2512939"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2568058.2568059"}],"container-title":["ACM Transactions on the Web"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3132709","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3132709","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T02:10:56Z","timestamp":1750212656000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3132709"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,7,17]]},"references-count":30,"journal-issue":{"issue":"3","published-print":{"date-parts":[[2018,8,31]]}},"alternative-id":["10.1145\/3132709"],"URL":"https:\/\/doi.org\/10.1145\/3132709","relation":{},"ISSN":["1559-1131","1559-114X"],"issn-type":[{"type":"print","value":"1559-1131"},{"type":"electronic","value":"1559-114X"}],"subject":[],"published":{"date-parts":[[2018,7,17]]},"assertion":[{"value":"2017-03-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2018-01-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2018-07-17","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}