Search code examples
c#encryptionaescryptlib

stream cypher encryption in AES


i implement AES 256 bit algorithm in C# but i am encrypting 128bit block of plain text which require padding so i dont want to pad and want use to stream cipher

  1. use stream cipher instead of using 128 bit block
  2. encrypt stream byte by byte

    CryptLib _crypt = new CryptLib();
    
    //string plainText = "This is the text to be encrypted";
    String iv = CryptLib.GenerateRandomIV(16); //16 bytes = 128 bits
    string key = CryptLib.getHashSha256("my secret key", 31); //32 bytes = 256 bits
    MessageBox.Show(arm);//////////////////////
    String cypherText = _crypt.encrypt(string1, key, iv);
    Console.WriteLine("iv=" + iv);
    Console.WriteLine("key=" + key);
    Console.WriteLine("Cypher text=" + cypherText);
    MessageBox.Show(cypherText);
    textBox1.Text = cypherText;
    Console.WriteLine("Plain text =" + _crypt.decrypt(cypherText, key, iv));
    MessageBox.Show(_crypt.decrypt(cypherText, key, iv));
    
    
    
    String dypher = _crypt.decrypt(cypherText, key, iv);
    string outp = string.Empty;
    char[] value = dypher.ToCharArray();
    

Solution

  • If the input data is always an exact multiple of the block size you can just specify no padding.

    if you have data of unknown non-uniform block lengths padding is the general way to handle that. Why do you not want to use padding.

    Additionally:

    It is common to prefix the encrypted data with the IV for use during decryption. The IV does not need to be secret and with this method the IV does not need to be shared in some other way and can easily be a different random value for each encryption.

    Deriving a key from a password (string) with a hash function is not considered secure, instead use a key derivarion function such as PBKDF2.