{"id":78377,"date":"2022-12-19T08:00:23","date_gmt":"2022-12-19T07:00:23","guid":{"rendered":"https:\/\/code-maze.com\/?p=78377"},"modified":"2024-01-31T15:37:50","modified_gmt":"2024-01-31T14:37:50","slug":"dotnet-secure-passwords-bcrypt","status":"publish","type":"post","link":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/","title":{"rendered":"How to Secure Passwords with BCrypt.NET"},"content":{"rendered":"<p>In this article, we are going to learn how to secure passwords with BCrypt.NET to ensure we are up to the industry standards when it comes to security in our .NET environment.<\/p>\n<div style=\"padding: 20px; border-left: 5px #dc2323 solid; display: block; margin-bottom: 20px; box-shadow: 1px 1px 5px 0px lightgrey;\">To download the source code for this article, you can visit our <a href=\"https:\/\/github.com\/CodeMazeBlog\/CodeMazeGuides\/tree\/main\/authorization-dotnet\/HowToSecurePasswordsWithBCryptNET\" target=\"_blank\" rel=\"nofollow noopener\">GitHub repository<\/a>.<\/div>\n<p>Let&#8217;s start.<\/p>\n<h2>Secure Password Storage<\/h2>\n<p>When storing passwords in a database, <strong>we must never store them in clear text<\/strong>. For that purpose, it is recommended to use techniques like <a href=\"https:\/\/code-maze.com\/csharp-hashing-salting-passwords-best-practices\/\" target=\"_blank\" rel=\"noopener\">hashing and salting<\/a> to <strong>prevent passwords from being compromised in the event of a data breach<\/strong>.<\/p>\n<h2>What is BCrypt?<\/h2>\n<p>BCrypt is a popular password-hashing function based on the Blowfish cipher algorithm and was created originally for the OpenBSD operative system and presented in 1999. Consequently, OpenBSD and other Linux distributions use BCrypt as the default password hash algorithm.<\/p>\n<p><strong>BCrypt automatically generates random salts.<\/strong> Password salts make hashes unique and difficult to break by brute force. Additionally, <strong>BCrypt is an adaptable password-hashing function<\/strong>, meaning that it can generate hashes that are computationally more costly to calculate via its work factor parameter.<\/p>\n<p>BCrypt is considered well-tested and stronger than other available hashing algorithms. Because of that, we can find BCrypt implementations in almost all major programming languages.<\/p>\n<h3>BCrypt Variants<\/h3>\n<p>Since its conception in 1999., its original authors updated the initial implementation BCrypt several times mainly to accommodate bug fixes. So, if we check the algorithm version in the generated hashes, we could find several different identifiers depending on the language, library, or version we use: <code>$2$<\/code>, <code>$2a$<\/code>, <code>$2x$<\/code>, <code>$2y$<\/code>, <code>$2b$<\/code>.<\/p>\n<p>As long as we use an up-to-date version when using BCrypt.NET to secure passwords, we do not have to worry about different variants since all of them are fully compatible.<\/p>\n<h2>How to Use BCrypt.NET For Password Hashing<\/h2>\n<p>To use the BCrypt hashing function for the .NET framework we must include the BCrypt.Net-Next package in our project:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">dotnet add package BCrypt.Net-Next<\/code><\/p>\n<p>Once we add the package, we can generate a hash from a clear-text password using the <code>HashPassword()<\/code> static method in the <code>BCrypt<\/code> class:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">var passwordHash = BCrypt.HashPassword(\"Password123!\");<\/code><\/p>\n<p>Moreover, verifying a hash is equally simple using the <code>Verify()<\/code> static method in the same class:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-highlight=\"1\">var result = BCrypt.Verify(\"Password123!\", passwordHash);\r\n\r\nAssert.True(result);<\/pre>\n<h3>Increasing Computational Cost<\/h3>\n<p><strong>We can create hashes more resilient to brute force by making the hash calculation purposedly slow<\/strong> so the many attempts attackers must perform to break a hash take as long as possible.<\/p>\n<p>As computers become faster, a password-hashing function that used to be slow a few years ago, today may take very little time to compute.<\/p>\n<p><strong>BCrypt can adapt to the increase of available computational power by iterating over the input data several times<\/strong>. The more iterations the slower the calculation will be. We can control this with the <code>workFactor<\/code> parameter of the <code>HashPassword()<\/code> method:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">var passwordHash = BCrypt.HashPassword(\"Password123!\", workFactor: 13);<\/code><\/p>\n<p>Here, we instruct BCrypt to apply the hashing function 2^13 times to the input string for a total of 8,192 iterations. In case we do not specify a work factor <strong>BCrypt uses a default value of 11<\/strong>.<\/p>\n<h3>Analyzing a BCrypt Hash<\/h3>\n<p>Whenever we use the <code>HashPassword()<\/code> method or one of its variants, BCrypt will generate a random salt and include it in the returned hash along with other data needed for the verification process.<\/p>\n<p>This is what a BCrypt hash looks like. Essentially, it is a set of three values separated by a <code>$<\/code> character:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\">$2a$13$gdtRuVYzDLFBUGnN1WxK\/.1OFFoD7CbDZjRYGknrOwT9rus5AsqTu<\/code><\/p>\n<p><code>2a<\/code> stands for the BCrypt algorithm version used to generate the hash.<\/p>\n<p><code>13<\/code> is the work factor.<\/p>\n<p><code>gdtRuVYzDLFBUGnN1WxK\/.1OFFoD7CbDZjRYGknrOwT9rus5AsqTu<\/code> contains both the salt and the hashed input password concatenated and Base64 encoded. Both values have fixed lengths so they are easy to tell apart.<\/p>\n<h3>BCrypt.NET Enhanced Entropy Mode<\/h3>\n<p>Despite BCrypt being a fairly secure hashing function, the default BCrypt implementation truncates the input password to 72 bytes. This, potentially, reduces the brute-force attempts needed to break a hash.<\/p>\n<p>To overcome this limitation, <strong>BCrypt.NET offers an enhanced entropy mode<\/strong> that pre-hashes the input password using SHA384. In this way, the input password turns into a fixed-length string that reflects all the variability of the original password regardless of its length.<\/p>\n<p>Let&#8217;s use the enhanced entropy mode with <code>EnhancedHashPassword()<\/code> and <code>EnhancedVerify()<\/code> static methods instead of the basic <code>HashPassword()<\/code> and <code>Verify()<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-highlight=\"1-2\">var passwordHash = BCrypt.EnhancedHashPassword(\"Password123!\");\r\nvar result = BCrypt.EnhancedVerify(\"Password123!\", passwordHash);\r\n\r\nAssert.True(result);<\/pre>\n<p>As mentioned, BCrypt uses SHA384 by default for the pre-hash step. However, there may be situations where we need to specify a different algorithm:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">var passwordHash = BCrypt.EnhancedHashPassword(\"Password123!\", HashType.SHA512);\r\nvar result = BCrypt.EnhancedVerify(\"Password123!\", passwordHash, HashType.SHA512);<\/pre>\n<h2>Conclusion<\/h2>\n<p>In this article, we&#8217;ve learned what is BCrypt and how it uses salts and configurable complexity to create secure password hashes, also, we&#8217;ve learned what BCrypt variants are.<\/p>\n<p>We&#8217;ve learned how to use BCrypt.NET to secure passwords in our .NET projects and reviewed the anatomy of a BCrypt hash.<\/p>\n<p>Finally, we learned how to make hashes even more secure using the enhanced entropy mode and increased computational cost.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we are going to learn how to secure passwords with BCrypt.NET to ensure we are up to the industry standards when it comes to security in our .NET environment. Let&#8217;s start. Secure Password Storage When storing passwords in a database, we must never store them in clear text. For that purpose, it [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":62191,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[2081,1806],"tags":[1534,1535,1533],"class_list":["post-78377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-client-library","category-security","tag-bcrypt","tag-hashing","tag-secure-passwords","et-has-post-format-content","et_post_format-et-post-format-standard"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Secure Passwords with BCrypt.NET - Code Maze<\/title>\n<meta name=\"description\" content=\"Let&#039;s learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Secure Passwords with BCrypt.NET - Code Maze\" \/>\n<meta property=\"og:description\" content=\"Let&#039;s learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\" \/>\n<meta property=\"og:site_name\" content=\"Code Maze\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-19T07:00:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-31T14:37:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"620\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Code Maze\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/CodeMazeBlog\" \/>\n<meta name=\"twitter:site\" content=\"@CodeMazeBlog\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Code Maze\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\"},\"author\":{\"name\":\"Code Maze\",\"@id\":\"https:\/\/code-maze.com\/#\/schema\/person\/09d29b223012c8e94a68ba62861d0b04\"},\"headline\":\"How to Secure Passwords with BCrypt.NET\",\"datePublished\":\"2022-12-19T07:00:23+00:00\",\"dateModified\":\"2024-01-31T14:37:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\"},\"wordCount\":765,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/code-maze.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png\",\"keywords\":[\"BCrypt\",\"Hashing\",\"Secure passwords\"],\"articleSection\":[\"Client Library\",\"Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\",\"url\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\",\"name\":\"How to Secure Passwords with BCrypt.NET - Code Maze\",\"isPartOf\":{\"@id\":\"https:\/\/code-maze.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png\",\"datePublished\":\"2022-12-19T07:00:23+00:00\",\"dateModified\":\"2024-01-31T14:37:50+00:00\",\"description\":\"Let's learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.\",\"breadcrumb\":{\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage\",\"url\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png\",\"contentUrl\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png\",\"width\":1100,\"height\":620,\"caption\":\".NET (Core)\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/code-maze.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Secure Passwords with BCrypt.NET\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/code-maze.com\/#website\",\"url\":\"https:\/\/code-maze.com\/\",\"name\":\"Code Maze\",\"description\":\"Learn. Code. Succeed.\",\"publisher\":{\"@id\":\"https:\/\/code-maze.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/code-maze.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/code-maze.com\/#organization\",\"name\":\"Code Maze\",\"url\":\"https:\/\/code-maze.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/code-maze.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png\",\"contentUrl\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png\",\"width\":3511,\"height\":3510,\"caption\":\"Code Maze\"},\"image\":{\"@id\":\"https:\/\/code-maze.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/CodeMazeBlog\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/code-maze.com\/#\/schema\/person\/09d29b223012c8e94a68ba62861d0b04\",\"name\":\"Code Maze\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/code-maze.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez-150x150.png\",\"contentUrl\":\"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez-150x150.png\",\"caption\":\"Code Maze\"},\"description\":\"This is the standard author on the site. Most articles are published by individual authors, with their profiles, but when several authors have contributed, we publish collectively as a part of this profile.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/codemaze\/\",\"https:\/\/x.com\/https:\/\/twitter.com\/CodeMazeBlog\"],\"url\":\"https:\/\/code-maze.com\/author\/codemazecontributor\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Secure Passwords with BCrypt.NET - Code Maze","description":"Let's learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/","og_locale":"en_US","og_type":"article","og_title":"How to Secure Passwords with BCrypt.NET - Code Maze","og_description":"Let's learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.","og_url":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/","og_site_name":"Code Maze","article_published_time":"2022-12-19T07:00:23+00:00","article_modified_time":"2024-01-31T14:37:50+00:00","og_image":[{"width":1100,"height":620,"url":"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png","type":"image\/png"}],"author":"Code Maze","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/CodeMazeBlog","twitter_site":"@CodeMazeBlog","twitter_misc":{"Written by":"Code Maze","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#article","isPartOf":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/"},"author":{"name":"Code Maze","@id":"https:\/\/code-maze.com\/#\/schema\/person\/09d29b223012c8e94a68ba62861d0b04"},"headline":"How to Secure Passwords with BCrypt.NET","datePublished":"2022-12-19T07:00:23+00:00","dateModified":"2024-01-31T14:37:50+00:00","mainEntityOfPage":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/"},"wordCount":765,"commentCount":2,"publisher":{"@id":"https:\/\/code-maze.com\/#organization"},"image":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage"},"thumbnailUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png","keywords":["BCrypt","Hashing","Secure passwords"],"articleSection":["Client Library","Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/","url":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/","name":"How to Secure Passwords with BCrypt.NET - Code Maze","isPartOf":{"@id":"https:\/\/code-maze.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage"},"image":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage"},"thumbnailUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png","datePublished":"2022-12-19T07:00:23+00:00","dateModified":"2024-01-31T14:37:50+00:00","description":"Let's learn how to use BCrypt.NET to secure passwords and make sure we follow the best practices to ensure higher security standards.","breadcrumb":{"@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#primaryimage","url":"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png","contentUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2021\/12\/social-dotnet-core.png","width":1100,"height":620,"caption":".NET (Core)"},{"@type":"BreadcrumbList","@id":"https:\/\/code-maze.com\/dotnet-secure-passwords-bcrypt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/code-maze.com\/"},{"@type":"ListItem","position":2,"name":"How to Secure Passwords with BCrypt.NET"}]},{"@type":"WebSite","@id":"https:\/\/code-maze.com\/#website","url":"https:\/\/code-maze.com\/","name":"Code Maze","description":"Learn. Code. Succeed.","publisher":{"@id":"https:\/\/code-maze.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/code-maze.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/code-maze.com\/#organization","name":"Code Maze","url":"https:\/\/code-maze.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/code-maze.com\/#\/schema\/logo\/image\/","url":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","contentUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","width":3511,"height":3510,"caption":"Code Maze"},"image":{"@id":"https:\/\/code-maze.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/CodeMazeBlog"]},{"@type":"Person","@id":"https:\/\/code-maze.com\/#\/schema\/person\/09d29b223012c8e94a68ba62861d0b04","name":"Code Maze","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/code-maze.com\/#\/schema\/person\/image\/","url":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez-150x150.png","contentUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez-150x150.png","caption":"Code Maze"},"description":"This is the standard author on the site. Most articles are published by individual authors, with their profiles, but when several authors have contributed, we publish collectively as a part of this profile.","sameAs":["https:\/\/www.linkedin.com\/company\/codemaze\/","https:\/\/x.com\/https:\/\/twitter.com\/CodeMazeBlog"],"url":"https:\/\/code-maze.com\/author\/codemazecontributor\/"}]}},"_links":{"self":[{"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/posts\/78377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/comments?post=78377"}],"version-history":[{"count":4,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/posts\/78377\/revisions"}],"predecessor-version":[{"id":78381,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/posts\/78377\/revisions\/78381"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/media\/62191"}],"wp:attachment":[{"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/media?parent=78377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/categories?post=78377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-maze.com\/wp-json\/wp\/v2\/tags?post=78377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}