Click here to Skip to main content
13,797,426 members
Click here to Skip to main content
Add your own
alternative version


37 bookmarked
Posted 26 Dec 2011
Licenced CPOL

Visual Image Cryptography Generator

, 6 Mar 2014
Rate this:
Please Sign up or sign in to vote.
Visual cryptography is a cryptographic technique which allows visual information (pictures, text, etc.) to be encrypted in such a way that the decryption can be performed by the human visual system, without the aid of computers.

Image 1

Image 2

After combining two images


Merry Christmas! Before writing this article, I wrote an article about Visual cryptography. But it's in text base, that means when you enter text and it will generate a visual encrypted images for you.

Recently, I received an email for if it can do in image base, select image and return encrypted images. And answer is of cause.


Visual cryptography was introduced by Naor and Shamir at EUROCRYPT '94. They asked the following intriguing question: is it possible to devise a secret sharing scheme in which an image can be reconstructed "visually" by superimposing two shares? Each share would consist of a transparency, made up of black and white pixels. (Note that it would be more accurate to say "transparent" rather than "white".) Examination of one share should reveal no information about the image.

For more details, please read this.

Using the Code

The main difference between Image and Text is that you can control the text background in Black and White but Image contains Color, so first what we need is to convert the color into Black and White:

private Bitmap ConvertToBackAndWhite(Bitmap source)
    int sourceWidth = source.Width;
    int sourceHeight = source.Height;
    Bitmap result = new Bitmap(sourceWidth, sourceHeight);
    double mid = 255d * (1d / 2d);
    for (int x = 0; x < sourceWidth; x++)
        for (int y = 0; y < sourceHeight; y++)
            Color c = source.GetPixel(x, y);
            c = (Average(c.R, c.G, c.B) > mid) ? Color.Empty : Color.Black;
            result.SetPixel(x, y, c);
    return result;

or you can change the color into gray scale

public Bitmap ConvertToGrayscale(Bitmap source)
    int sourceWidth = source.Width;
    int sourceHeight = source.Height;
    Bitmap result = new Bitmap(sourceWidth, sourceHeight);
    for (int y = 0; y < sourceHeight; y++)
        for (int x = 0; x < sourceWidth; x++)
            Color c = source.GetPixel(x, y);
            int luma = (int)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);
            result.SetPixel(x, y, Color.FromArgb(luma, luma, luma));
    return result; 

and use my halftone class to convert it into black and white, read more

List<Color> palette = new List<Color>(); //Color Palette
palette.Add(Color.FromArgb(0, 0, 0));
palette.Add(Color.FromArgb(255, 255, 255));
using (Bitmap gSource = ConvertToGrayscale(source))
    using (Bitmap bwSource = FloydSteinbergDither.Process(gSource, palette.ToArray()))
        m_EncryptedImages = GenerateImage(bwSource);

After converting the image to black and white, the other is the same as text encryption. And I'm not describing the details here.

Enjoy the article and Christmas Holidays.



  • 26th December, 2011: Initial post
  • 6th March 2014: Update to grayscale and halftone support


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Jacky Yiu
Architect MouxIdea Limited
Hong Kong Hong Kong
1981 Born in Hong Kong
1996 Become Badminton Trainer
1997 Hong Kong's Return to China
1998 The Year After Hong Kong's Return to China
1999 The Year Before Millennium
2000 First touch of programming - ASP(guestbook)
2001 Outstanding Student Award - Computing Department
2002 Xcellence Developer Awards - Best Graphical Focused Application(Game) Award
2003 Microsoft MVP - .NET
2004 Be lost in Technology
2005 Microsoft MVP - C#
2006 Microsoft MVP - C#
2007 Getting Marry - Cheers~
2008 Microsoft MVP - C#
2009 Microsoft MVP - C#
2010 Microsoft MVP - C#
2011 Start my software hut

You may also be interested in...

Comments and Discussions

QuestionMessage Removed Pin
3-Jul-18 10:15
memberMember 135616693-Jul-18 10:15 
QuestionCode description needed Pin
Member 1307693622-Mar-17 18:13
memberMember 1307693622-Mar-17 18:13 
AnswerRe: Code description needed Pin
Jacky Yiu10-Apr-17 22:10
memberJacky Yiu10-Apr-17 22:10 
QuestionPlease help Pin
koznov12314-Jan-12 20:22
memberkoznov12314-Jan-12 20:22 
AnswerRe: Please help Pin
Member 1000475323-Oct-13 16:23
memberMember 1000475323-Oct-13 16:23 
GeneralNice to read the article Pin
sudhansu_k12326-Dec-11 23:40
membersudhansu_k12326-Dec-11 23:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web02 | 2.8.181207.3 | Last Updated 6 Mar 2014
Article Copyright 2011 by Jacky Yiu
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid