Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

NeoCaptcha - A Captcha Generation Library

Overview

NeoCaptcha is a lightweight, efficient captcha generation library designed for use across multiple platforms. The library leverages SkiaSharp for rendering and provides a flexible solution for captcha creation in both .NET Core and ASP.NET Core environments.

NeoCaptcha generates captchas that can be used to validate user inputs, and includes noise elements like random lines to enhance the complexity of the captcha images.

Features

  • Multiplatform support via SkiaSharp.
  • Customizable captcha text generation.
  • Optional multi-color text for visual diversity.
  • Simple API for integration with ASP.NET Core.
  • Image format options (PNG/JPG).
  • Noise generation in the form of random lines.

Getting Started

To use NeoCaptcha in your project, you can follow the steps outlined for both the base usage and integration with ASP.NET Core.

dotnet add package NeoCaptcha 
dotnet add package NeoCaptcha.AspnetCore 

1. Base Usage (Non-ASP.NET Core)

Installing the Package

  1. Add NeoCaptcha to your project via NuGet or from the source.

Captcha Class Usage

The core of the library is the Captcha class, which handles captcha creation. Below is how to generate a captcha image:

usingNeoCaptcha;varcaptchaOptions=newCaptchaOptions{CharacterCount=6,Width=220,Height=70,ImageFormat=CaptchaImageFormat.PNG};varcaptcha=newCaptcha(captchaOptions);Console.WriteLine($"Captcha Text: {captcha.Text}");Console.WriteLine($"Captcha Image Bytes Length: {captcha.ImageAsByteArray.Length}");

This code snippet generates a captcha image with random text, which is returned as a byte array that can be rendered in a UI.


2. ASP.NET Core Integration

You can easily integrate NeoCaptcha into your ASP.NET Core project by registering it as a service. This allows you to generate and validate captchas in your web API.

Installing the Package

  1. Add NeoCaptcha to your ASP.NET Core project via NuGet.

Registering the Captcha Service

In the Startup.cs or Program.cs file, register NeoCaptcha as a service in the ConfigureServices method:

publicvoidConfigureServices(IServiceCollectionservices){// 5 min expirationservices.AddNeoCaptchaGenerator(TimeSpan.FromMinutes(5));}

Using the Captcha in a Controller

In your controller, you can now use the ICaptchaGenerator service to generate and validate captchas:

usingNeoCaptcha;usingMicrosoft.AspNetCore.Mvc;publicclassCaptchaController:ControllerBase{privatereadonlyICaptchaGenerator_captchaGenerator;publicCaptchaController(ICaptchaGeneratorcaptchaGenerator){_captchaGenerator=captchaGenerator;}[HttpGet]publicasyncTask<IActionResult>GenerateCaptcha(){varcaptcha=await_captchaGenerator.GenerateNewCaptcha();Console.WriteLine(captcha.CaptchaId);returnFile(captcha.CaptchaImage,"image/png");}[HttpPost][ServiceFilter(typeof(VerifyNeoCaptchaFilterFactory))]publicasyncTask<IActionResult>VerifyCaptchaAttribFilterFactory([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost][VerifyNeoCaptcha]publicasyncTask<IActionResult>VerifyCaptchaAttrib([FromBody]TestModelmodel){returnOk("It works!");}[HttpPost]publicasyncTask<IActionResult>VerifyCaptchaManual([FromBody]TestModelmodel){varresult=await_captchaGenerator.ValidateCaptcha(model.CaptchaId,model.CaptchaChallenge);if(result==CaptchaValidationResult.OK){returnOk("It works!");}returnBadRequest("captcha error");}publicclassTestModel:NeoCaptchaCapableModel{publicrequiredstringPayload{get;set;}}}

Explanation:

  • GenerateCaptcha: This endpoint generates a new captcha and returns the image as a PNG file.
  • VerifyCaptcha: This endpoint verifies the user's input against the captcha.

CaptchaOptions Class

You can configure the captcha generation with the CaptchaOptions class:

publicclassCaptchaOptions{publicintCharacterCount{get;set;}=6;publicintWidth{get;set;}=220;publicintHeight{get;set;}=70;publicCaptchaImageFormatImageFormat{get;set;}=CaptchaImageFormat.PNG;publicboolIsMultiColorText{get;set;}=false;}

Properties:

  • CharacterCount: The number of characters in the captcha text.
  • Width: The width of the captcha image.
  • Height: The height of the captcha image.
  • ImageFormat: The format of the generated image (PNG or JPG).
  • IsMultiColorText: Whether the captcha text should be multi-colored.

Captcha Generation & Validation

  • The GenerateNewCaptcha method returns a captcha image and its associated text.
  • The ValidateCaptcha method checks if the user's input matches the captcha text.

CaptchaManager Class

The NeoCaptchaManager is responsible for managing captcha instances, storing them temporarily, and validating user inputs:

publicclassNeoCaptchaManager:ICaptchaGenerator{privatereadonlyFastCache<Guid,string>_captchaResultHolder=new();publicTask<CaptchaGeneratorResult>GenerateNewCaptcha(CaptchaOptionscaptchaOptions){varcaptcha=newCaptcha(captchaOptions);varid=Guid.NewGuid();varresult=newCaptchaGeneratorResult(id,captcha.ImageAsByteArray);_captchaResultHolder.TryAdd(id,captcha.Text,expirationTime);returnTask.FromResult(result);}publicTask<CaptchaValidationResult>ValidateCaptcha(GuidcaptchaId,stringchallenge){if(!_captchaResultHolder.TryRemove(captchaId,outvartext)){returnTask.FromResult(CaptchaValidationResult.EXPIRED);}returnTask.FromResult(challenge==text?CaptchaValidationResult.OK:CaptchaValidationResult.INVALID);}}

Using in Docker env :

Make sure you have "libfontconfig1" installed :

RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*

Captcha Outputs Example :

image

with multicolor

image

with rotaion

image

With Blur and Background Noise

image


AzCaptcha trying to solve captchas generated by NeoCaptcha (failing) image

About

A simple, yet powerful library to generate and validate captcha fully locally with no 3rd party dependency for ASPNET Core

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages