Click here to Skip to main content
15,892,575 members
Articles / Programming Languages / Visual Basic
Article

Implementing Caesar Cipher in VB.NET

Rate me:
Please Sign up or sign in to vote.
2.53/5 (12 votes)
2 Nov 2006Ms-PL 81.8K   2.5K   18   2
This article implements Caesar Cipher (shift by 3) in VB.NET.

Sample Image - Caesar.jpg

Introduction

This article describes implementing the Caesar Cipher (shift by 3) algorithm in VB.NET 2005. It’s a very simple piece of code (was difficult for me as I belong to the C# family). This was one of my practice applications to get my hands on VB.NET.

Background

Caesar Cipher is a rotation based encryption algorithm that replaces each character in the input string with the third (or nth) next character. For example, “ABC” when encrypted, will become “DEF”. Decryption is similar, simply rotate in the backward direction.

Using the code

The solution has a class CaesarCipher which you can use in your application for encrypting and decrypting stuff. This solution applies not just to readable English characters but to any Unicode character (making it specific to English would have been a little tricky).

The source code of the CaesarCipher class is given below:

VB
Friend Class CaeserCipher

    ''' <summary>
    ''' The number of places to shift for encrypting or decrypting
    ''' </summary>
    ''' <remarks></remarks>
    Private _shiftCount As Integer

    ''' <summary>
    ''' Gets or sets the number of places to shift while
    ''' encrypting or decrypting
    ''' </summary>
    ''' <value>The number of places to shift while
    '''        encrypting or decrypting</value>
    ''' <returns>The number of places to shift while
    '''          encrypting or decrypting</returns>
    ''' <remarks></remarks>
    Public Property ShiftCount() As Integer
        Get
            Return _shiftCount
        End Get
        Set(ByVal value As Integer)
            _shiftCount = value
        End Set
    End Property

    ''' <summary>
    ''' Default constructor. Creates a new CaesarCipher
    ''' object with ShiftCount = 3
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Me.New(3)
    End Sub

    ''' <summary>
    ''' Creates a new CaesarCipher object with specified ShiftCount
    ''' </summary>
    ''' <PARAM name="shiftCount">The number of places to shift
    ''' while encrypting or decrypting</PARAM>
    ''' <remarks></remarks>
    Public Sub New(ByVal shiftCount As Integer)
        Me.ShiftCount = shiftCount
    End Sub

    ''' <summary>
    ''' Encrypts a given string
    ''' </summary>
    ''' <PARAM name="plainText">The plainText string to encrypt</PARAM>
    ''' <returns>Encrypted ciphertext</returns>
    ''' <remarks></remarks>
    Public Function Encipher(ByVal plainText As String) As String
        Dim cipherText As String = String.Empty
        Dim cipherInChars(plainText.Length) As Char
        For i As Integer = 0 To plainText.Length - 1
            cipherInChars(i) = _
               Convert.ToChar((Convert.ToInt32(
               Convert.ToChar(plainText(i))) + Me.ShiftCount))
        Next
        cipherText = New String(cipherInChars)
        Return cipherText
    End Function

    ''' <summary>
    ''' Decrypts given cipherText
    ''' </summary>
    ''' <PARAM name="cipherText">The cipherText to decrypt</PARAM>
    ''' <returns>Decrypted Plaintext</returns>
    ''' <remarks></remarks>
    Public Function Decipher(ByVal cipherText As String) As String
        Dim plainText As String = String.Empty
        Dim cipherInChars(cipherText.Length) As Char
        For i As Integer = 0 To cipherText.Length - 1
            cipherInChars(i) = _
               Convert.ToChar((Convert.ToInt32(
               Convert.ToChar(cipherText(i))) - Me.ShiftCount))
        Next
        plainText = New String(cipherInChars)
        Return plainText
    End Function

End Class

Enhancements

No exception handling has been done, and the code is not unbreakable. So please modify it if you plan to use it in your application..

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)


Written By
Software Developer Microsoft India
India India
I am a developer (okay... that's very obvious!). I started programming at the age of 17 when I entered my engineering graduation back in the year 2001. I started off with C, C++ on UNIX. But soon I realized that if I need to make money out of my skills, I need to add some visual element to my applications (and that I need to switch to MS technologies!). Someone told me about VB. I started learning it but couldn’t get thru (I was religiously in love with curly braces; I never felt VB is a language). Then I began with VC++ 6.0 and I fell in love with it. Since then, I have been working on various MS technologies (C++, C#, VB.NET, SQL Server 2000/2005 etc.) I graduated in 2005 and currently, I am working with Microsoft in Hyderabad, India.
That’s all I can write as of now. If you want to know more, drop me a mail, I will try and respond Smile | :)

Comments and Discussions

 
BugGood Pin
ayo4322-Oct-15 3:19
ayo4322-Oct-15 3:19 
This is good, well written.
GeneralCIS Security Pin
keith franklin30-Oct-08 11:54
keith franklin30-Oct-08 11:54 

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.