The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
A consistent interface to encrypt/decrypt strings, objects, files and connections in R. Both symmetric and asymmetric encryption methods are supported. Thanks to excellent packages
sodium
andbase64enc
.
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) |
library("safer")
# 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
.
# 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
# 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
# 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
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.