Encrypt file name in C # without including unsuitable characters in the resulting string

I want to encrypt the file name, but make sure that the encrypted file name does not contain any characters that are not allowed (on Windows) in the file names.

The string must also be decrypted back to the original file name (therefore, you cannot just filter out invalid characters after encryption).

As far as I know, unsuitable characters are \ /: *? "> <|. I know System.IO.Path.InvalidPathChars, but I don’t know the encryption method that will avoid these characters.

+3
source share
5 answers

MIME Base64. , . ( , .Replace() .)

, base64'd:

c2UgdGhpcyBiYXNlNjQgc2FtcGxlIGRlY29kZXIgYW5kIGVuY29kZXIgdG86DQpGcmVuZCBDemVj aCBsaW5rcw0KDQpMYXN0IG1pbnV0ZSBaYWplemR5DQpBa2NpZSBCaWJsZQ0KTGV2bmUgcG5ldQ0K RmFrdHVyYQ0KU2VhcmNoIEN6ZWNoDQpIcnksIFZ5enZhbmVuaSBuYSBtb2JpbA0KT3RoZXINCg0K ICAgICogRGVjb2RlIGJhc2U2NCBzdHJpbmdzIChiYXNlNjQgc3RyaW5nIGxvb2tzIGxpa2UgWVRN ME5ab21JekkyT1RzbUl6TTBOVHVlWVE9PSkNCiAgICAqIERlY29kZSBhIGJhc2U2NCBlbmNvZGVk IGZpbGUgKGZvciBleGFtcGxlIElDTyBmaWxlcyBvciBmaWxlcyBmcm9tIE1JTUUgbWVzc2FnZSkN CiAgICAqIENvbnZlcnQgc291cmNlIHRleHQgZGF0YSBmcm9tIHNldmVyYWwgY29kZSBwYWdlcyBh bmQgZW5jb2RlIHRoZW0gdG8gYSBiYXNlNjQgc3RyaW5nIG9yIGEgZmlsZQ0KDQoNCiAgICAgIFRo ZSBGb3JtLlNpemVMaW1pdCBpcyAxMDAwMDAwMGJ5dGVzLiBQbGVhc2UsIGRvIG5vdCBwb3N0IG1v cmUgZGF0YSB1c2luZyB0aGlzIGZvcm0uDQoNCiAgICAgVHlwZSAob3IgY29weS1wYXN0ZSkgc29t ZSB0ZXh0IHRvIGEgdGV4dGJveCBiZWxsb3cuIFRoZSB0ZXh0IGNhbiBiZSBCYXNlNjQ =

+7

@Tom, base64 . .NET base64 , .

var encryptedFilename = GetEncryptedFileName();
var encodedFileName = Convert.ToBase64String(Encoding.UTF8.GetBytes(encryptedFilename));
var encodedAndEscapedFilename = encodedFileName.Replace('/', '-');

, ( Convert.FromBase64String Encoding.UTF8.GetString).

+4

"", [] . [], hex (0xBAADF00D) Base64. , base64 , Convert.ToBase64String Convert.FromBase64String.

, . . / , . , (, "file.txt", "file.txt", ), IV ( ). IV cribs. , ( IV) .

+3

, "", [] .

BitConverter.ToString(Bytes);, hex, FF-D0-FF-D1. , .Replace("-", "");

.

BitConverter.ToString(AESEncryption.Encrypt(, key)).Replace("-", "");

(AESEncryption - RijndaelManaged)

, ,

    private byte[] FromHexString(string encryptedToken)
    {
        List<byte> bytes = new List<byte>();

        for (int i = 0; i <= encryptedToken.Length; i+=2)
        {
            try
            {
                bytes.Add((byte)Int32.Parse(encryptedToken.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));
            }
            catch //whatever exception
            {
                //handle
            }

        }

        return bytes.ToArray();
    }      
+1

My answer was to convert the encrypted code to HEX. The advantage of this was compatibility between ASP, ASPX, SQL, VB, C #, and Javascript. Another advantage was that I could use the encryption of my choice without worrying about logging out.

+1
source

Source: https://habr.com/ru/post/1726284/


All Articles