Generate Key using Cipher Block Chaining MAC

danishce

Member
Joined
Apr 2, 2007
Messages
15
Programming Experience
3-5
I want to encrypt the ASCII message using Cipher Block Chaining MAC and generate the 8 byte key using CBC MAC.Suppose i want to encrypt the text:
Message=012130000000002003909000000780000018291898 (Any Length)
the key generate for this message is:
Key=12345678 (8 Bytes)
How can i achieve this in vb.net?
Thanks:
Danish Majid
 
VB.Net Encrypted Key Generation

I want to generate 8 byte key using CBC MAC by applying encryption to whole message in vb.net.My code is:

//Main form Code
VB.NET:
Imports System.Security.Cryptography
Dim plainText As String
Dim cipherText As String

Dim passPhrase As String
Dim saltValue As String
Dim hashAlgorithm As String
Dim passwordIterations As Integer
Dim initVector As String
Dim keySize As Integer

plainText = "Hello, World! how are you, 546548732424 jhsda237 ..................624 ASCII charaters" 
passPhrase = "Pas5pr@se" ' can be any string
saltValue = "s@1tValue" ' can be any string
hashAlgorithm = "SHA1" ' can be "MD5"
passwordIterations = 2 ' can be any number
initVector = "@1B2c3D4e5F6g7H8" ' must be 16 bytes
keySize = 256 ' can be 192 or 128

cipherText = Module1.Encrypt(plainText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize)
MsgBox(String.Format("Encrypted : {0}", cipherText))


//Module code
VB.NET:
Imports System
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

Module Module1
Public Function Encrypt(ByVal plainText As String, ByVal passPhrase As String, ByVal saltValue As String, _
ByVal hashAlgorithm As String, ByVal passwordIterations As Integer, ByVal initVector As String, ByVal keySize As Integer) As String

' Convert strings into byte arrays.
' Let us assume that strings only contain ASCII codes.
' If strings include Unicode characters, use Unicode, UTF7, or UTF8 
' encoding.
Dim initVectorBytes As Byte()
initVectorBytes = Encoding.ASCII.GetBytes(initVector)

Dim saltValueBytes As Byte()
saltValueBytes = Encoding.ASCII.GetBytes(saltValue)

' Convert our plaintext into a byte array.
' Let us assume that plaintext contains UTF8-encoded characters.
Dim plainTextBytes As Byte()
plainTextBytes = Encoding.UTF8.GetBytes(plainText)

' First, we must create a password, from which the key will be derived.
' This password will be generated from the specified passphrase and 
' salt value. The password will be created using the specified hash 
' algorithm. Password creation can be done in several iterations.
Dim password As PasswordDeriveBytes
password = New PasswordDeriveBytes(passPhrase, _
saltValueBytes, _
hashAlgorithm, _
passwordIterations)

' Use the password to generate pseudo-random bytes for the encryption
' key. Specify the size of the key in bytes (instead of bits).
Dim keyBytes As Byte()
keyBytes = password.GetBytes(keySize / 32)

' Create uninitialized Rijndael encryption object.
Dim symmetricKey As RijndaelManaged
symmetricKey = New RijndaelManaged


' It is reasonable to set encryption mode to Cipher Block Chaining
' (CBC). Use default options for other symmetric key parameters.
symmetricKey.Mode = CipherMode.CBC

' Generate encryptor from the existing key bytes and initialization 
' vector. Key size will be defined based on the number of the key 
' bytes.
Dim encryptor As ICryptoTransform
encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)

' Define memory stream which will be used to hold encrypted data.
Dim memoryStream As MemoryStream
memoryStream = New MemoryStream

' Define cryptographic stream (always use Write mode for encryption).
Dim cryptoStream As CryptoStream
cryptoStream = New CryptoStream(memoryStream, _
encryptor, _
CryptoStreamMode.Write)
' Start encrypting.
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length)

' Finish encrypting.
cryptoStream.FlushFinalBlock()

' Convert our encrypted data from a memory stream into a byte array.
Dim cipherTextBytes As Byte()
cipherTextBytes = memoryStream.ToArray()

' Close both streams.
memoryStream.Close()
cryptoStream.Close()

' Convert encrypted data into a base64-encoded string.
Dim cipherText As String
cipherText = Convert.ToBase64String(cipherTextBytes)

' Return encrypted string.
Encrypt = cipherText
End Function
End Module
Problem is i want to generate 8 byte key on applying CBC MAC to the plain text but it gives the encrypted output of same length as that of plain text.any body know this?
 
Last edited by a moderator:
ISO/IEC 9797-1 CBC MAC using vb.net

Hi,

I need to calculate the Cryptographic checksum using ISO/IEC 9797-1 MAC
algorithm with cipher block chaining MAC. The resultant MAC length must be 8 bytes.
As a sample, the data I am working on now is:
Data = '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2'
Kmac = '7962D9ECE03D1ACD4C76089DCE131543'


Resultant MAC[Kmac](Data)='53265320' (I want to know how to get
to this value using vb.net).
I search this on google but no success.
 
Back
Top