@@ -226,7 +226,6 @@ public static byte[] AESDecrypt(byte[] data, string key, string vector)
226226 public static string AESEncrypt ( string data , string key )
227227 {
228228 Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
229-
230229 Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
231230 Check . Argument . IsNotOutOfRange ( key . Length , 32 , 32 , nameof ( key ) ) ;
232231
@@ -241,9 +240,8 @@ public static string AESEncrypt(string data, string key)
241240 aes . Mode = CipherMode . ECB ;
242241 aes . Padding = PaddingMode . PKCS7 ;
243242 aes . KeySize = 128 ;
244- //aes.Key = _key;
245243 aes . Key = bKey ;
246- //aes.IV = _iV;
244+
247245 using ( CryptoStream cryptoStream = new CryptoStream ( Memory , aes . CreateEncryptor ( ) , CryptoStreamMode . Write ) )
248246 {
249247 try
@@ -279,15 +277,13 @@ public static string AESDecrypt(string data, string key)
279277
280278 using ( MemoryStream Memory = new MemoryStream ( encryptedBytes ) )
281279 {
282- //mStream.Write( encryptedBytes, 0, encryptedBytes.Length );
283- //mStream.Seek( 0, SeekOrigin.Begin );
284280 using ( Aes aes = Aes . Create ( ) )
285281 {
286282 aes . Mode = CipherMode . ECB ;
287283 aes . Padding = PaddingMode . PKCS7 ;
288284 aes . KeySize = 128 ;
289285 aes . Key = bKey ;
290- //aes.IV = _iV;
286+
291287 using ( CryptoStream cryptoStream = new CryptoStream ( Memory , aes . CreateDecryptor ( ) , CryptoStreamMode . Read ) )
292288 {
293289 try
@@ -296,7 +292,8 @@ public static string AESDecrypt(string data, string key)
296292 int len = cryptoStream . Read ( tmp , 0 , encryptedBytes . Length ) ;
297293 byte [ ] ret = new byte [ len ] ;
298294 Array . Copy ( tmp , 0 , ret , 0 , len ) ;
299- return Encoding . UTF8 . GetString ( ret ) ;
295+
296+ return Encoding . UTF8 . GetString ( ret , 0 , len ) ;
300297 }
301298 catch ( Exception ex )
302299 {
@@ -306,6 +303,14 @@ public static string AESDecrypt(string data, string key)
306303 }
307304 }
308305 }
306+
307+ /// <summary>
308+ /// AES Rijndael
309+ /// </summary>
310+ public static void AESRijndael ( )
311+ {
312+ throw new NotImplementedException ( ) ;
313+ }
309314 #endregion
310315
311316 #region DES
@@ -319,6 +324,15 @@ public static string CreateDesKey()
319324 return GetRandomStr ( 24 ) ;
320325 }
321326
327+ /// <summary>
328+ /// Create des iv
329+ /// </summary>
330+ /// <returns></returns>
331+ public static string CreateDesIv ( )
332+ {
333+ return GetRandomStr ( 8 ) ;
334+ }
335+
322336 /// <summary>
323337 /// DES encrypt
324338 /// </summary>
@@ -332,7 +346,7 @@ public static string DESEncrypt(string data, string key)
332346 Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
333347
334348 byte [ ] plainBytes = Encoding . UTF8 . GetBytes ( data ) ;
335- var encryptBytes = DESEncrypt ( plainBytes , key ) ;
349+ var encryptBytes = DESEncrypt ( plainBytes , key , CipherMode . ECB ) ;
336350
337351 if ( encryptBytes == null )
338352 {
@@ -344,7 +358,7 @@ public static string DESEncrypt(string data, string key)
344358 /// <summary>
345359 /// DES encrypt
346360 /// </summary>
347- /// <param name="data">Raw data</param>
361+ /// <param name="data">Raw data byte array </param>
348362 /// <param name="key">Key, requires 24 bits</param>
349363 /// <returns>Encrypted byte array</returns>
350364 public static byte [ ] DESEncrypt ( byte [ ] data , string key )
@@ -353,6 +367,43 @@ public static byte[] DESEncrypt(byte[] data, string key)
353367 Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
354368 Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
355369
370+ return DESEncrypt ( data , key , CipherMode . ECB ) ;
371+ }
372+
373+
374+ /// <summary>
375+ /// DES encrypt
376+ /// </summary>
377+ /// <param name="data">Raw data byte array</param>
378+ /// <param name="key">Key, requires 24 bits</param>
379+ /// <param name="vector">IV,requires 16 bits</param>
380+ /// <returns>Encrypted byte array</returns>
381+ public static byte [ ] DESEncrypt ( byte [ ] data , string key , string vector )
382+ {
383+ Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
384+ Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
385+ Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
386+ Check . Argument . IsNotEmpty ( vector , nameof ( vector ) ) ;
387+ Check . Argument . IsNotOutOfRange ( vector . Length , 8 , 8 , nameof ( vector ) ) ;
388+
389+ return DESEncrypt ( data , key , CipherMode . CBC , vector ) ;
390+ }
391+
392+ /// <summary>
393+ /// DES encrypt
394+ /// </summary>
395+ /// <param name="data">Raw data</param>
396+ /// <param name="key">Key, requires 24 bits</param>
397+ /// <param name="cipherMode"><see cref="CipherMode"/></param>
398+ /// <param name="paddingMode"><see cref="PaddingMode"/> default is PKCS7</param>
399+ /// <param name="vector">IV,requires 16 bits</param>
400+ /// <returns>Encrypted byte array</returns>
401+ private static byte [ ] DESEncrypt ( byte [ ] data , string key , CipherMode cipherMode , string vector = "" , PaddingMode paddingMode = PaddingMode . PKCS7 )
402+ {
403+ Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
404+ Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
405+ Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
406+
356407 using ( MemoryStream Memory = new MemoryStream ( ) )
357408 {
358409 using ( TripleDES des = TripleDES . Create ( ) )
@@ -361,9 +412,17 @@ public static byte[] DESEncrypt(byte[] data, string key)
361412 byte [ ] bKey = new byte [ 24 ] ;
362413 Array . Copy ( Encoding . UTF8 . GetBytes ( key . PadRight ( bKey . Length ) ) , bKey , bKey . Length ) ;
363414
364- des . Mode = CipherMode . ECB ;
365- des . Padding = PaddingMode . PKCS7 ;
415+ des . Mode = cipherMode ;
416+ des . Padding = paddingMode ;
366417 des . Key = bKey ;
418+
419+ if ( cipherMode == CipherMode . CBC )
420+ {
421+ byte [ ] bVector = new byte [ 8 ] ;
422+ Array . Copy ( Encoding . UTF8 . GetBytes ( vector . PadRight ( bVector . Length ) ) , bVector , bVector . Length ) ;
423+ des . IV = bVector ;
424+ }
425+
367426 using ( CryptoStream cryptoStream = new CryptoStream ( Memory , des . CreateEncryptor ( ) , CryptoStreamMode . Write ) )
368427 {
369428 try
@@ -394,7 +453,7 @@ public static string DESDecrypt(string data, string key)
394453 Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
395454
396455 byte [ ] encryptedBytes = Convert . FromBase64String ( data ) ;
397- byte [ ] bytes = DESDecrypt ( encryptedBytes , key ) ;
456+ byte [ ] bytes = DESDecrypt ( encryptedBytes , key , CipherMode . ECB ) ;
398457
399458 if ( bytes == null )
400459 {
@@ -403,13 +462,48 @@ public static string DESDecrypt(string data, string key)
403462 return Encoding . UTF8 . GetString ( bytes ) ;
404463 }
405464
465+ /// <summary>
466+ /// DES decrypt
467+ /// </summary>
468+ /// <param name="data">Encrypted data byte array</param>
469+ /// <param name="key">Key, requires 24 bits</param>
470+ /// <returns>Decrypted string</returns>
471+ public static byte [ ] DESDecrypt ( byte [ ] data , string key )
472+ {
473+ Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
474+ Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
475+ Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
476+
477+ return DESDecrypt ( data , key , CipherMode . ECB ) ;
478+ }
479+
480+ /// <summary>
481+ /// DES encrypt
482+ /// </summary>
483+ /// <param name="data">Raw data byte array</param>
484+ /// <param name="key">Key, requires 24 bits</param>
485+ /// <param name="vector">IV,requires 16 bits</param>
486+ /// <returns>Encrypted byte array</returns>
487+ public static byte [ ] DESDecrypt ( byte [ ] data , string key , string vector )
488+ {
489+ Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
490+ Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
491+ Check . Argument . IsNotOutOfRange ( key . Length , 24 , 24 , nameof ( key ) ) ;
492+ Check . Argument . IsNotEmpty ( vector , nameof ( vector ) ) ;
493+ Check . Argument . IsNotOutOfRange ( vector . Length , 8 , 8 , nameof ( vector ) ) ;
494+
495+ return DESDecrypt ( data , key , CipherMode . CBC , vector ) ;
496+ }
497+
406498 /// <summary>
407499 /// DES decrypt
408500 /// </summary>
409501 /// <param name="data">Encrypted data</param>
410502 /// <param name="key">Key, requires 24 bits</param>
503+ /// <param name="cipherMode"><see cref="CipherMode"/></param>
504+ /// <param name="paddingMode"><see cref="PaddingMode"/> default is PKCS7</param>
411505 /// <returns>Decrypted byte array</returns>
412- public static byte [ ] DESDecrypt ( byte [ ] data , string key )
506+ private static byte [ ] DESDecrypt ( byte [ ] data , string key , CipherMode cipherMode , string vector = "" , PaddingMode paddingMode = PaddingMode . PKCS7 )
413507 {
414508 Check . Argument . IsNotEmpty ( data , nameof ( data ) ) ;
415509 Check . Argument . IsNotEmpty ( key , nameof ( key ) ) ;
@@ -423,9 +517,17 @@ public static byte[] DESDecrypt(byte[] data, string key)
423517 {
424518 using ( TripleDES des = TripleDES . Create ( ) )
425519 {
426- des . Mode = CipherMode . ECB ;
427- des . Padding = PaddingMode . PKCS7 ;
520+ des . Mode = cipherMode ;
521+ des . Padding = paddingMode ;
428522 des . Key = bKey ;
523+
524+ if ( cipherMode == CipherMode . CBC )
525+ {
526+ byte [ ] bVector = new byte [ 8 ] ;
527+ Array . Copy ( Encoding . UTF8 . GetBytes ( vector . PadRight ( bVector . Length ) ) , bVector , bVector . Length ) ;
528+ des . IV = bVector ;
529+ }
530+
429531 using ( CryptoStream cryptoStream = new CryptoStream ( Memory , des . CreateDecryptor ( ) , CryptoStreamMode . Read ) )
430532 {
431533 try
0 commit comments