9
9
using System . Security . Cryptography ;
10
10
using System . Text ;
11
11
using CryptoNet . Models ;
12
+ using CryptoNet . Utils ;
12
13
13
- namespace CryptoNet . Cli ;
14
-
15
- public class ExampleAes
14
+ namespace CryptoNet . Cli
16
15
{
17
- private const string ConfidentialDummyData = @"Some Secret Data" ;
18
-
19
- private static readonly string BaseFolder = AppDomain . CurrentDomain . BaseDirectory ;
20
- private static readonly string SymmetricKeyFile = Path . Combine ( BaseFolder , $ "{ KeyType . SymmetricKey } .xml") ;
21
16
22
- public static void Test ( )
17
+ public class ExampleAes
23
18
{
24
- Example_1_Encrypt_Decrypt_Content_With_SelfGenerated_SymmetricKey ( ) ;
25
- Example_2_SelfGenerated_And_Save_SymmetricKey ( ) ;
26
- Example_3_Encrypt_Decrypt_Content_With_Own_SymmetricKey ( ) ;
27
- Example_4_Encrypt_Decrypt_Content_With_Human_Readable_Key_Secret_SymmetricKey ( ) ;
28
- }
19
+ protected ExampleAes ( ) { }
29
20
30
- public static void Example_1_Encrypt_Decrypt_Content_With_SelfGenerated_SymmetricKey ( )
31
- {
32
- ICryptoNet cryptoNet = new CryptoNetAes ( ) ;
33
- var key = cryptoNet . ExportKey ( ) ;
21
+ private const string ConfidentialDummyData = @"Some Secret Data" ;
34
22
35
- ICryptoNet encryptClient = new CryptoNetAes ( key ) ;
36
- var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
23
+ private static readonly string BaseFolder = AppDomain . CurrentDomain . BaseDirectory ;
24
+ private readonly static string SymmetricKeyFile = Path . Combine ( BaseFolder , $ " { KeyType . SymmetricKey } .xml" ) ;
37
25
38
- ICryptoNet decryptClient = new CryptoNetAes ( key ) ;
39
- var decrypt = decryptClient . DecryptToString ( encrypt ) ;
26
+ public static void Example_1_Encrypt_Decrypt_Content_With_SelfGenerated_SymmetricKey ( )
27
+ {
28
+ ICryptoNet cryptoNet = new CryptoNetAes ( ) ;
29
+ var key = cryptoNet . ExportKey ( ) ;
40
30
41
- Debug . Assert ( ConfidentialDummyData == decrypt ) ;
42
- }
31
+ ICryptoNet encryptClient = new CryptoNetAes ( key ) ;
32
+ var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
43
33
44
- public static void Example_2_SelfGenerated_And_Save_SymmetricKey ( )
45
- {
46
- ICryptoNet cryptoNet = new CryptoNetAes ( ) ;
47
- var file = new FileInfo ( SymmetricKeyFile ) ;
48
- cryptoNet . ExportKeyAndSave ( file ) ;
34
+ ICryptoNet decryptClient = new CryptoNetAes ( key ) ;
35
+ var decrypt = decryptClient . DecryptToString ( encrypt ) ;
49
36
50
- Debug . Assert ( File . Exists ( file . FullName ) ) ;
37
+ Debug . Assert ( ConfidentialDummyData == decrypt ) ;
38
+ }
51
39
52
- var encrypt = cryptoNet . EncryptFromString ( ConfidentialDummyData ) ;
53
-
54
- ICryptoNet cryptoNetKeyImport = new CryptoNetAes ( file ) ;
55
- var decrypt = cryptoNetKeyImport . DecryptToString ( encrypt ) ;
40
+ public static void Example_2_SelfGenerated_And_Save_SymmetricKey ( )
41
+ {
42
+ ICryptoNet cryptoNet = new CryptoNetAes ( ) ;
43
+ var file = new FileInfo ( SymmetricKeyFile ) ;
44
+ cryptoNet . ExportKeyAndSave ( file ) ;
56
45
57
- Debug . Assert ( ConfidentialDummyData == decrypt ) ;
58
- }
46
+ Debug . Assert ( File . Exists ( file . FullName ) ) ;
59
47
60
- public static void Example_3_Encrypt_Decrypt_Content_With_Own_SymmetricKey ( )
61
- {
62
- var symmetricKey = "12345678901234567890123456789012" ;
63
- if ( symmetricKey . Length != 32 )
64
- {
65
- Console . WriteLine ( "key should be 32 character long" ) ;
66
- Environment . Exit ( 0 ) ;
48
+ var encrypt = cryptoNet . EncryptFromString ( ConfidentialDummyData ) ;
49
+
50
+ ICryptoNet cryptoNetKeyImport = new CryptoNetAes ( file ) ;
51
+ var decrypt = cryptoNetKeyImport . DecryptToString ( encrypt ) ;
52
+
53
+ Debug . Assert ( ConfidentialDummyData == decrypt ) ;
67
54
}
68
55
69
- var secret = "1234567890123456" ;
70
- if ( secret . Length != 16 )
56
+ public static void Example_3_Encrypt_Decrypt_Content_With_Own_SymmetricKey ( )
71
57
{
72
- Console . WriteLine ( "key should be 16 character long" ) ;
73
- Environment . Exit ( 1 ) ;
58
+ var symmetricKey = "12345678901234567890123456789012" ;
59
+ if ( symmetricKey . Length != 32 )
60
+ {
61
+ Console . WriteLine ( "key should be 32 character long" ) ;
62
+ Environment . Exit ( 0 ) ;
63
+ }
64
+
65
+ var secret = "1234567890123456" ;
66
+ if ( secret . Length != 16 )
67
+ {
68
+ Console . WriteLine ( "key should be 16 character long" ) ;
69
+ Environment . Exit ( 1 ) ;
70
+ }
71
+
72
+ var key = Encoding . UTF8 . GetBytes ( symmetricKey ) ;
73
+ var iv = Encoding . UTF8 . GetBytes ( secret ) ;
74
+
75
+ ICryptoNet encryptClient = new CryptoNetAes ( key , iv ) ;
76
+ var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
77
+
78
+ ICryptoNet decryptClient = new CryptoNetAes ( key , iv ) ;
79
+ var decrypt = decryptClient . DecryptToString ( encrypt ) ;
80
+
81
+ Debug . Assert ( ConfidentialDummyData == decrypt ) ;
74
82
}
75
83
76
- var key = Encoding . UTF8 . GetBytes ( symmetricKey ) ;
77
- var iv = Encoding . UTF8 . GetBytes ( secret ) ;
84
+ public static void Example_4_Encrypt_Decrypt_Content_With_Human_Readable_Key_Secret_SymmetricKey ( )
85
+ {
86
+ var symmetricKey = UniqueKeyGenerator ( "symmetricKey" ) ;
87
+ var secret = new string ( UniqueKeyGenerator ( "password" ) . Take ( 16 ) . ToArray ( ) ) ;
78
88
79
- ICryptoNet encryptClient = new CryptoNetAes ( key , iv ) ;
80
- var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
89
+ var key = Encoding . UTF8 . GetBytes ( symmetricKey ) ;
90
+ var iv = Encoding . UTF8 . GetBytes ( secret ) ;
81
91
82
- ICryptoNet decryptClient = new CryptoNetAes ( key , iv ) ;
83
- var decrypt = decryptClient . DecryptToString ( encrypt ) ;
92
+ ICryptoNet encryptClient = new CryptoNetAes ( key , iv ) ;
93
+ var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
84
94
85
- Debug . Assert ( ConfidentialDummyData == decrypt ) ;
86
- }
95
+ ICryptoNet decryptClient = new CryptoNetAes ( key , iv ) ;
96
+ var decrypt = decryptClient . DecryptToString ( encrypt ) ;
87
97
88
- public static void Example_4_Encrypt_Decrypt_Content_With_Human_Readable_Key_Secret_SymmetricKey ( )
89
- {
90
- var symmetricKey = UniqueKeyGenerator ( "symmetricKey" ) ;
91
- var secret = new string ( UniqueKeyGenerator ( "password" ) . Take ( 16 ) . ToArray ( ) ) ;
98
+ Debug . Assert ( ConfidentialDummyData == decrypt ) ;
99
+ }
92
100
93
- var key = Encoding . UTF8 . GetBytes ( symmetricKey ) ;
94
- var iv = Encoding . UTF8 . GetBytes ( secret ) ;
101
+ public static void Example_5_Encrypt_And_Decrypt_PdfFile_With_SymmetricKey_Test ( string filename )
102
+ {
103
+ ICryptoNet cryptoNet = new CryptoNetAes ( ) ;
104
+ var key = cryptoNet . ExportKey ( ) ;
95
105
96
- ICryptoNet encryptClient = new CryptoNetAes ( key , iv ) ;
97
- var encrypt = encryptClient . EncryptFromString ( ConfidentialDummyData ) ;
106
+ FileInfo fi = new FileInfo ( filename ) ;
98
107
99
- ICryptoNet decryptClient = new CryptoNetAes ( key , iv ) ;
100
- var decrypt = decryptClient . DecryptToString ( encrypt ) ;
108
+ ICryptoNet encryptClient = new CryptoNetAes ( key ) ;
109
+ string pdfFilePath = Path . Combine ( BaseFolder , filename ) ;
110
+ byte [ ] pdfFileBytes = File . ReadAllBytes ( pdfFilePath ) ;
111
+ var encrypt = encryptClient . EncryptFromBytes ( pdfFileBytes ) ;
101
112
102
- Debug . Assert ( ConfidentialDummyData == decrypt ) ;
103
- }
113
+ ICryptoNet decryptClient = new CryptoNetAes ( key ) ;
114
+ var decrypt = decryptClient . DecryptToBytes ( encrypt ) ;
115
+ string pdfDecryptedFilePath = $ "TestFiles\\ { Path . GetFileNameWithoutExtension ( fi . Name ) } -decrypted.{ fi . Extension } ";
116
+ File . WriteAllBytes ( pdfDecryptedFilePath , decrypt ) ;
104
117
105
- public static string UniqueKeyGenerator ( string input )
106
- {
107
- MD5 md5 = MD5 . Create ( ) ;
108
- byte [ ] inputBytes = Encoding . ASCII . GetBytes ( input ) ;
109
- byte [ ] hash = md5 . ComputeHash ( inputBytes ) ;
118
+ var isIdenticalFile = CryptoNetUtils . ByteArrayCompare ( pdfFileBytes , decrypt ) ;
119
+ Debug . Assert ( isIdenticalFile ) ;
120
+ }
110
121
111
- StringBuilder sb = new StringBuilder ( ) ;
112
- foreach ( var t in hash )
122
+ public static string UniqueKeyGenerator ( string input )
113
123
{
114
- sb . Append ( t . ToString ( "X2" ) ) ;
124
+ byte [ ] inputBytes = Encoding . ASCII . GetBytes ( input ) ;
125
+ byte [ ] hash = MD5 . HashData ( inputBytes ) ;
126
+
127
+ StringBuilder sb = new StringBuilder ( ) ;
128
+ foreach ( var t in hash )
129
+ {
130
+ sb . Append ( t . ToString ( "X2" ) ) ;
131
+ }
132
+ return sb . ToString ( ) ;
115
133
}
116
- return sb . ToString ( ) ;
117
134
}
118
-
119
- }
135
+ }
0 commit comments