124 lines
2.7 KiB
Markdown
124 lines
2.7 KiB
Markdown
# encrypted-tables
|
|
|
|
Operate an ordered sequence of dicts (referred here as a table) in the command line, and store them in the filesystem.
|
|
|
|
## Description
|
|
|
|
Currently, we support base64 encoded (no encryption) or the fernet symmetric entryption algorithm.
|
|
|
|
Warning: Storing in base64 format without encryption provides a false sense of security and should be avoided, it is kept for backward compatibility only.
|
|
|
|
The symmetric key is obtained by a key derivation function taking your password and a randomly-generated salt as input.
|
|
|
|
I don't know why anyone would need this, why not use a database?
|
|
|
|
## How to run
|
|
|
|
Environment: Python 3.8 (other versions might work as well), cryptography==39.0.1
|
|
|
|
### Basic usage
|
|
|
|
#### 1.Create a new table
|
|
|
|
`python peek.py example fernet --create`. You will be prompted to enter a password for this table first.
|
|
|
|
The "table" in this program is different from the table in the database sense, it is an ordered sequence of rows, where each row is a dictionary (collection of key-value pairs).
|
|
|
|
#### 2. Add data rows and printing the table
|
|
|
|
Enter kv pairs to initialize / add a row. Use command 'a' to add row and 'p' to print rows.
|
|
```
|
|
>a
|
|
k:name
|
|
v:alice
|
|
k:sport
|
|
v:skiing
|
|
k:
|
|
>a
|
|
k:name
|
|
v:bob
|
|
k:sport
|
|
v:cycling
|
|
k:
|
|
>p
|
|
0
|
|
name:alice sport:skiing
|
|
1
|
|
name:bob sport:cycling
|
|
```
|
|
|
|
#### 3. Modify a row / delete a row
|
|
|
|
Use command 'm' to modify a row (add new kv pairs or overwrite existing kv pairs); use 'd' to delete a row by its current index in the table.
|
|
```
|
|
>m
|
|
index:1
|
|
k:lang
|
|
v:en
|
|
k:
|
|
>d
|
|
index:0
|
|
deleting 1:name:alice sport:skiing
|
|
>p
|
|
0
|
|
name:bob sport:cycling lang:en
|
|
```
|
|
|
|
#### 4. Saving, quitting, and reopening
|
|
|
|
Use the command 'wq' to save and quit, 'q!' to discard changes and quit.
|
|
```
|
|
>wq
|
|
# python peek.py example fernet
|
|
password:<yourpassword>
|
|
>p
|
|
name:bob sport:cycling lang:en
|
|
```
|
|
|
|
### Using shortcuts
|
|
|
|
Key names must have at least 2 characters; you can setup and use single-character shortcuts to refer to the key name.
|
|
|
|
#### Defining shortcuts
|
|
|
|
Use 'sc' to define shortcuts; Running this command will overwrite all existing shortcuts, you must exit and re-enter the program for the shortcut to take effect.
|
|
```
|
|
>sc
|
|
{}
|
|
k:n
|
|
v:name
|
|
k:s
|
|
v:sport
|
|
k:
|
|
>wq
|
|
```
|
|
|
|
#### Using shortcuts
|
|
|
|
You can use shortcuts to add rows more efficiently.
|
|
```
|
|
>a
|
|
k:n
|
|
v:carol
|
|
k:s
|
|
v:swimming
|
|
```
|
|
|
|
#### Format print using shortcuts
|
|
|
|
You can print the table in the format specified using the command 'f'. It prints an table with the keys ordered by the string you give (use shortcut to represent keys); only rows that have all the keys available will be printed. use '+' to print any additional keys in each row.
|
|
|
|
```
|
|
>f
|
|
ns
|
|
|#|name|sport|
|
|
|---|---|---|
|
|
|0|bob|cycling|
|
|
|1|carol|swimming|
|
|
>f
|
|
keys:sn+
|
|
|#|sport|name|+|
|
|
|---|---|---|---|
|
|
|0|cycling|bob|lang:en;|
|
|
|1|swimming|carol||
|
|
``` |