Stream Ciphers
The simplest stream cipher is called the Vernam Cipher. A
bit from a key is added, with the carry discarded, to a bit
from the plain text to get one bit of cipher text. XOR
encryption is the example of stream cipher, it is turn out to
be easy to crack. it is weak when repeating the same keys, but
it can be very effective when the key stream varies constantly.
The most well known stream cipher is RC4.
Block Ciphers
Block ciphers are designed to take data blocks of
particular size, encrypt them with a key in particular size,
and get a block of cipher text of a particular size, Block
ciphers encrypt data in fixed size blocks. To encrypt a stream
of data, the data must be broken into block size pieces and
each block encrypted individually. When decrypted in the right
order the encrypted blocks get the original plain text.
In geometrical pattern encoding we are using block ciphers,
today's practical block ciphers all generate a cipher text
block same size as the palin text block. Data Encryption
Standard (DES) may be the best block cipher. Block ciphers are
analyzed and tested for their ability to encrypt the data
blocks of their given block size. A statistical analysis of cipher text
generated by the block cipher algorithm should find that
individual data bits as well as pattern of bits appear
completely random.
Data block size and secret key size in block ciphers

Encryption
Algorithm 
Data
Block (Bits) 
Secret
Key (Bits) 

Data
Encryption Standard (DES) 
64 
56 

International
Data encryption Algorithm (IDEA) 
64 
128 

Modular
Multiplication Block (MMB) 
128 
128 

SKIPJACK 
64 
80 
Patterns in the cipher text become a problem when we apply
same secret keys to stream of data. if we encrypt the same
block twice with same key, it returns same cipher text for
both occurrence, for a experienced cracker easily identified
the visual pattern of cipher text and exploit the cipher text
with some reverse calculation. This makes the messages more
vulnerable to attack. if we encrypt a stream block by block,
patterns in the plaintext will produce statistically
significant patterns in the cipher text. these pattern can
give a code breaker the entry point for an attack.
Initialize Vector (IV)
Cipher block chaining in the plain text by systematically
combining each plaintext block with a cipher text before
actually encrypting it, the two blocks combined bit by bit
using XOR operation, instead of directly encrypting plaintext
data, the block cipher encrypts the plain text data after it
is combined with random looking cipher text, the process
started with a block of random bits called the initialization
vector (IV). two same plain text will never look same in
cipher text as the IV is different for both the case.
In following Example we use symmetric key for both encryption
and decryption, however if we encrypt same text repeating time
it creates different cipher text every time, we use Initialization
vector for selecting the bit pattern for each time, we pass
the same bit pattern to cipher text block to decrypt it to plain
text.
Function for encryption
private Function StrEncrypt(ByVal EnStr As
String) As
String
Dim
Key As String
Key = "Abt$9>3ZyX
21~)**1_0d%1xOp0#?s!14kL7`3s9cxPo1ilIj=0DnmOpas#$%5854/*?>00021atanu???"
Dim
p1 As Integer
Randomize()
p1 = (Rnd() * 8) + 1
Dim
p2 As Integer
p2 = Len(EnStr)
Dim
RandSeed As Integer
RandSeed = p1
Dim
i As Integer
Dim
s1 As String
= ""
Dim
ft As String
ft = ""
For
i = 1 To 50
s1
= s1 & Chr(Asc(Rnd() * 255))
Next
ft = Chr(p1) &
Chr(p2)
Dim
iXor As Integer
For
i = 1 To Len(EnStr)
iXor
= Asc(Mid(KeyPair, i + p1, 1)) Xor
Asc(Mid(EnStr, i, 1))
ft
= ft & Chr(iXor)
Next
For
i = Len(ft) To 50
ft
= ft & Chr(Rnd() * 255)
Next
StrEncrypt = ft
End
Function
Function for decryption
Private Function StrDecrypt(ByVal EnStr As
String) As
String
Dim
Key As String
Key = "Abt$9>3ZyX
21~)**1_0d%1xOp0#?s!14kL7`3s9cxPo1ilIj=0DnmOpas#$%5854/*?>00021atanu???"
Dim
EText As String
Dim
Rt As String
Dim
p1, i As Integer
EText = EnStr
Dim
Pbit As Integer
Pbit = Asc(Mid(EText, 1,
1))
p1 = Asc(Mid(EText, 1,
1))
Dim
PLen As Integer
PLen = Asc(Mid(EText, 2,
1))
Rt = ""
For
i = 3 To PLen + 2
Rt = Rt & Chr(Asc(Mid(EText, i, 1)) Xor
Asc(Mid(Key, i  2 + p1, 1)))
Next
StrDecrypt = Rt
End
Function
For example if we use plain text "ATANU MAITY"
and encrypt it with StrEncrypt function it will create cipher
text different for every time.
CASE 1.
StrEncrypt("ATANU MAITY")
Cipher Text "xjr,xmsx*p_qc€ý÷ßZÊödñ¸H`xü5¯†9³ŒzÅª¢¿,ë¾À"
CASE 2.
StrEncrypt("ATANU MAITY")
Cipher Text ":i#ubK\{jizC,,g¾°8;TÑl›¬ÚŠjm1v"ë3a9>ô+•`P=/"
CASE 3.
StrEncrypt("ATANU")
Cipher Text "366bu9\VŒª…VßÎ°’—ÐJŒ¨‹Ÿ˜ [Js¥Pß‚åš¢8`7Ÿ Ýh¥"
if you carefully analysis with Case 1 and Case 2, you can not
find any pattern match between two cipher text although pain
text and secret key are same. and if you analysis case no 1
with case no 2 then you can find the length of cipher text
dose not vary with the length of plain text.
For completing listing of the code and sample Visual Basic 6
project for Symmetric IV Encryption can be found in Sample Code
section.
