https://github.com/talegari/safer
A consistent interface to encrypt and decrypt strings, R objects, files
https://github.com/talegari/safer
encryption r-package r-stats
Last synced: 3 months ago
JSON representation
A consistent interface to encrypt and decrypt strings, R objects, files
- Host: GitHub
- URL: https://github.com/talegari/safer
- Owner: talegari
- Created: 2017-04-19T21:45:03.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-02-09T14:31:28.000Z (about 2 years ago)
- Last Synced: 2024-10-13T11:26:28.957Z (4 months ago)
- Topics: encryption, r-package, r-stats
- Language: R
- Homepage: https://talegari.github.io/safer/
- Size: 76.2 KB
- Stars: 21
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: NEWS.md
Awesome Lists containing this project
- jimsghstars - talegari/safer - A consistent interface to encrypt and decrypt strings, R objects, files (R)
README
safer
=============> A consistent interface to encrypt/decrypt strings, objects, files and connections in R.
- symmetric and asymmetric encryption methods are supported.
- Based on [libsodium](https://doc.libsodium.org/) crypto library.### Design
There are four functions and their *inverses*.
- `encryt_string` (`decrypt_string`)
- `encryt_object` (`decrypt_object`)
- `encryt_file` (`decrypt_file`)
- `save_object` (`retrieve_object`)The following table summarizes their functionality:
Function
Input
Output
Has side-effect
`encryt_string`
a string
string/raw
No
`encryt_object`
a R object
raw/string
No
`encrypt_file`
a file on disk
TRUE
Yes (Output to disk)
`save_object`
a R object
TRUE
Yes (Output to disk)
### Examples
library("safer")
#### String
# symmetric case:
temp <- encrypt_string("hello, how are you", key = "secret")
all(
is.character(temp)
, decrypt_string(temp, "secret") == "hello, how are you"
, class(try(decrypt_string(temp, "nopass"), silent = TRUE)) == "try-error"
)## [1] TRUE
res <- encrypt_string("tatvamasi", ascii = FALSE)
isTRUE(identical(decrypt_string(res), "tatvamasi"))
## [1] TRUE
# asymmetric case:
alice <- keypair()
bob <- keypair()
temp <- encrypt_string("hello asymmetric", alice$private_key, bob$public_key)
temp2 <- decrypt_string(temp, bob$private_key, alice$public_key)
identical("hello asymmetric", temp2)## [1] TRUE
Henceforth, we shall default password for symmetric case: `pass`.
#### Object
# symmetric case:
temp <- encrypt_object(1:3)
all(
is.raw(temp)
, decrypt_object(temp) == 1:3)## [1] TRUE
temp <- encrypt_object(iris, ascii = TRUE)
all(
is.character(temp)
, decrypt_object(temp) == iris
, identical(decrypt_object(temp), iris))## [1] TRUE
rm(temp)
# asymmetric case:
alice <- keypair()
bob <- keypair()
temp <- encrypt_object(1:10, alice$private_key, bob$public_key)
temp2 <- decrypt_object(temp, bob$private_key, alice$public_key)
identical(1:10, temp2)## [1] TRUE
#### File
# symmetric case:
write.table(iris, "iris.csv")
all(
encrypt_file("iris.csv", outfile = "iris_encrypted.bin")
, file.exists("iris_encrypted.bin")
, decrypt_file("iris_encrypted.bin", outfile = "iris_2.csv")
, file.exists("iris_2.csv")
, tools::md5sum("iris_2.csv") == tools::md5sum("iris.csv")
, unlink("iris.csv") == 0
, unlink("iris_2.csv") == 0
, unlink("iris_encrypted.bin") == 0
)## [1] TRUE
write.table(iris, "iris.csv")
all(
encrypt_file("iris.csv", outfile = "iris_encrypted.txt", ascii = TRUE)
, file.exists("iris_encrypted.txt")
, decrypt_file("iris_encrypted.txt", outfile = "iris_2.csv", ascii = TRUE)
, file.exists("iris_2.csv")
, tools::md5sum("iris_2.csv") == tools::md5sum("iris.csv")
, unlink("iris.csv") == 0
, unlink("iris_2.csv") == 0
, unlink("iris_encrypted.txt") == 0
)## [1] TRUE
# asymmetric case:
alice <- keypair()
bob <- keypair()
write.table(iris, "iris.csv")
all(
encrypt_file("iris.csv", alice$private_key, bob$public_key, outfile = "iris_encrypted.bin")
, file.exists("iris_encrypted.bin")
, decrypt_file("iris_encrypted.bin", bob$private_key, alice$public_key, outfile = "iris_2.csv")
, file.exists("iris_2.csv")
, tools::md5sum("iris_2.csv") == tools::md5sum("iris.csv")
, unlink("iris.csv") == 0
, unlink("iris_2.csv") == 0
, unlink("iris_encrypted.bin") == 0
)## [1] TRUE
#### Save
# symmetric case:
all(
save_object(iris, conn = "iris_safer.bin")
, identical(retrieve_object(conn = "iris_safer.bin"), iris)
, unlink("iris_safer.bin") == 0
)## [1] TRUE
all(
save_object(iris, conn = "iris_safer_2.txt", ascii = TRUE)
, identical(retrieve_object(conn = "iris_safer_2.txt", ascii = TRUE), iris)
, unlink("iris_safer_2.txt") == 0
)## [1] TRUE
# asymmetric case:
alice <- keypair()
bob <- keypair()
all(
save_object(iris, alice$private_key, bob$public_key, conn = "iris_safer.bin")
, identical(retrieve_object(conn = "iris_safer.bin", bob$private_key, alice$public_key), iris)
, unlink("iris_safer.bin") == 0
)## [1] TRUE