Can I somehow password-protect pre-import CSV files?

G

Guest

I wrote a simple VB.NET application that imports and edits CSV files.

Now I’d like to “lock†the raw (pre-import) CSV files so these cannot be
opened separately. It is not high-sensitive data, I just don’t want folks to
peek in the files.

So time-consuming encryption is not necessary, just a simple
password-to-open that I can program in my application so it internally opens
the imported CSV file would be perfect, but I can’t get it done. In fact it
seems difficult to password-protect a CSV file in any way.

The pre-import CSV’s are delivered as ZIP’s, so I thought about
password-protecting the ZIP files and importing and unzipping these within my
program, but this would seem much more challenging (if at all possible)
especially for an inexperienced programmer like me.

Any tips, pointers, ideas are highly appreciated. Thanks!
 
B

Bill Voorhees

one easy solution is to save as excel file, password protect it, delete csv
file. When you need the csv file, open the excel file and save as csv file.
 
G

Guest

Bill, that seemed a great idea but I just saved a 295 kB CSV file as a 1451
kB XLS file: it appears the filesize increases almost 5X. That's a serious
price to pay.

Appreciate your suggestion, but still open to others that may keep the
filesize in check. Thanks.

-joni
 
T

Tom Leylan

The reason that you cannot password protect a CSV file is because by
definition there is no place to store the password. It's a file of
"comma-separated values" for that to be recognized by any program one can't
arbitrarily declare a password is inside it somewhere.

You have two standard solutions. One is to create your own file format
which consists of a password field "plus" a csv file. Your app would know
where the password is and can check it and it would know the offset where
the CSV begins. Keep in mind that while this may stop the novice it
wouldn't stop anybody with relatively ordinary skills who might open the
file with say Notepad and notice a perfectly good CSV file a few bytes to
the right of something that looks like a password.

The other solution (as you mentioned) is to encrypt the file which would
stop most people as your app would the only one that could decrypt it. It
doesn't have to be time-consuming but obviously it would take some time.
Perhaps not much longer than it would to prompt the user for a password and
of course the users wouldn't stick the password on a post-it (tm) note on
their monitor.
 
G

Guest

Much obliged Tom, very clear advice.

The csv + password method is just below minimum indeed.

Any encryption method perhaps you could point me to that would fit the bill?:

- CSV files
- speed over (extreme) security
- decrypt in VB.NET
- not (much) filesize increase

Thanks very much!

-joni
 
T

Tom Leylan

I'm not an expert on this stuff but you can check the
System.Security.Cryptography Namespace. You may prefer a symmetric
algorithm so you can encrypt/decrypt without a lot of fuss.

That said you can also just obscure the data by encoding it in Base64.
There are methods in the Convert Class you can use. It should be fast and
while somebody might recognize it as Base64 encoding the average user
probably wouldn't. I tried it out and successfully read a CSV, converted to
Base64 and wrote it out to a new file then read that file back in and wrote
out a standard CSV again. Whichever method you choose you would do well to
search the Internet as there are dozens of examples and a few complete
implementations that you could just download and use.

Personally I wouldn't get too concerned over the speed until it is
demonstrated to actually take too long. That might happen but if the
slowest encryption method (with the highest security) isn't noticeable on
the file sizes you have then any of the faster algorithms would obviously be
fine.

Hope this helps.
 
M

Martin H.

Hello jonigr,
Now I’d like to “lock†the raw (pre-import) CSV files so these cannot be
opened separately. It is not high-sensitive data, I just don’t want folks to
peek in the files.
You could ZIP them. ZIP archives also support password protection.
The pre-import CSV’s are delivered as ZIP’s, so I thought about
password-protecting the ZIP files and importing and unzipping these within my
program, but this would seem much more challenging (if at all possible)
especially for an inexperienced programmer like me.

The easy solution would be to call a DOS ZIP archiver (via Shell
function) and provide the required data (File name, archive name, password).

Best regards,

Martin
 
J

Jay B. Harlow [MVP - Outlook]

jonigr,
The pre-import CSV’s are delivered as ZIP’s, so I thought about
password-protecting the ZIP files and importing and unzipping these within
my
Have you considered a .NET 3.0 "Package"? Aka an Office 2007 .xlsx file?

http://msdn.microsoft.com/msdnmag/issues/06/11/BasicInstincts/default.aspx

http://msdn2.microsoft.com/en-us/library/system.io.packaging.aspx

http://www.microsoft.com/downloads/...0B-F857-4A14-83F5-25634C3BF043&displaylang=en


..NET 3.0 & Office 2007 are adopting the "Package" as a standard file format.
What is a "Package" you ask? Its little more then a specifically formatted
Zip file. In other words its a zip file that contains a specific structure &
some specific files. Office 2007 files are packages (zip files) that contain
XML documents.

What is .NET 3.0 you ask? .NET 3.0 is a full superset of .NET 2.0 that is
included with Windows Vista. .NET 2.0 programs run unaffected as .NET 3.0
adds new namespaces & types to existing .NET 2.0 installations.


I was under the impression, but have not verified it, that you can use the
System.IO.Packaging namespace to open a plain ZIP file. Something that I
will try this morning & report back on. If System.IO.Packaging cannot read
plain zip files, you should be able to use this converter to save the xls as
an xlsx file:

http://www.microsoft.com/downloads/...70-3AE9-4AEE-8F43-C6BB74CD1466&displaylang=en
 
G

Guest

So time-consuming encryption is not necessary, just a simple
password-to-open that I can program in my application so it internally
opens the imported CSV file would be perfect, but I canƒ Tt get it
done. In fact it seems difficult to password-protect a CSV file in any
way.

CSVs have no password protection so you'll need to implement some sort of
security layer.

How about zipping the file with a password. Unzip to read?

You can use something like SharpZipLib to compress (very easy to use).
 
G

Guest

Allow me to address all great advice in this one post.

In following the various leads I found KB article 301070 using
System.Security.Cryptography Namespace that Tom mentioned and has code ready.
I honestly didn't go in-depth but the fast encrypted file looks like absolute
total garbage. Great! More than enough to scare the hell out of my average
user, never mind the pro hackers.

I will look into the ZIP possibilities suggested, this could be an
alternative.

Jay, thanks for mentioning the "Package" format, totally new to me.

Thank y'all, this is a very helpful group. I mark this one as solved.

-joni
 
J

Jay B. Harlow [MVP - Outlook]

I was under the impression, but have not verified it, that you can use the
System.IO.Packaging namespace to open a plain ZIP file.
Playing with the System.IO.Packaging namespace this afternoon; I was
mistaken.

System.IO.Packaging cannot open a plain ZIP file. It needs to be a true
Package file.

However! as I suggested Office 2007 uses Packages as a native format, while
earlier versions have a converter that can be used to read & write Packages.

--
Hope this helps
Jay B. Harlow [MVP - Outlook]
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net


Jay B. Harlow said:
jonigr,
The pre-import CSV’s are delivered as ZIP’s, so I thought about
password-protecting the ZIP files and importing and unzipping these
within my
Have you considered a .NET 3.0 "Package"? Aka an Office 2007 .xlsx file?

http://msdn.microsoft.com/msdnmag/issues/06/11/BasicInstincts/default.aspx

http://msdn2.microsoft.com/en-us/library/system.io.packaging.aspx

http://www.microsoft.com/downloads/...0B-F857-4A14-83F5-25634C3BF043&displaylang=en


.NET 3.0 & Office 2007 are adopting the "Package" as a standard file
format. What is a "Package" you ask? Its little more then a specifically
formatted Zip file. In other words its a zip file that contains a specific
structure & some specific files. Office 2007 files are packages (zip
files) that contain XML documents.

What is .NET 3.0 you ask? .NET 3.0 is a full superset of .NET 2.0 that is
included with Windows Vista. .NET 2.0 programs run unaffected as .NET 3.0
adds new namespaces & types to existing .NET 2.0 installations.


I was under the impression, but have not verified it, that you can use the
System.IO.Packaging namespace to open a plain ZIP file. Something that I
will try this morning & report back on. If System.IO.Packaging cannot read
plain zip files, you should be able to use this converter to save the xls
as an xlsx file:

http://www.microsoft.com/downloads/...70-3AE9-4AEE-8F43-C6BB74CD1466&displaylang=en


--
Hope this helps
Jay B. Harlow [MVP - Outlook]
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net


jonigr said:
I wrote a simple VB.NET application that imports and edits CSV files.

Now I’d like to “lock†the raw (pre-import) CSV files so these cannot be
opened separately. It is not high-sensitive data, I just don’t want folks
to
peek in the files.

So time-consuming encryption is not necessary, just a simple
password-to-open that I can program in my application so it internally
opens
the imported CSV file would be perfect, but I can’t get it done. In fact
it
seems difficult to password-protect a CSV file in any way.

The pre-import CSV’s are delivered as ZIP’s, so I thought about
password-protecting the ZIP files and importing and unzipping these
within my
program, but this would seem much more challenging (if at all possible)
especially for an inexperienced programmer like me.

Any tips, pointers, ideas are highly appreciated. Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top