This R package provides the cryptographic library msoc and allows encrypting and decrypting office open xml files with R.
You can install the development version of msoc from
GitHub with:
# install.packages("remotes")
remotes::install_github("JanMarvin/msoc")Or from r-universe with:
# Enable repository from janmarvin
options(repos = c(
janmarvin = 'https://janmarvin.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
# Download and install msoc in R
install.packages('msoc')A word of warning. I have no background in cryptography and I am somewhat unable to maintain the bundled msoc library. Assume that I only made it work and if it ever breaks, you are on your own. Due to these reasons the package will never be released to CRAN either.
Before you encrypt a file, you should memorize the password. If you forget the password, there is no way to recover the contents of the file.
Prior to release 0.2 password encoding was not extensively tested. And
possibly broken. If a file with a non ASCII password does not open with
spreadsheet software it should still be possible to decrypt the file
with a msoc release < 0.2. Support for non ASCII characters is
included since 0.2, but even spreadsheet software warns that passwords
with non ASCII characters might not open with some spreadsheet software.
Therefore it is recommended to check that files encoded this way, can be
opened in spreadsheet software and otherwise fall back to a pure ASCII
password.
library(msoc)
file <- system.file("extdata", "Untitled1.xlsx", package = "msoc")
# out is an encrypted file and you will
# be unable to open it without the password
out <- encrypt(file, pass = "msoc")
# out is an decrypted file and readable
# without the password
out <- decrypt(out, pass = "msoc")An example with openxlsx2
library(openxlsx2)
library(msoc)
xlsx <- temp_xlsx()
# let us write some worksheet
wb_workbook()$add_worksheet()$add_data(x = mtcars)$save(xlsx)
# now we can encrypt it
encrypt(xlsx, xlsx, pass = "msoc")
#> [1] "/tmp/Rtmp42ze8T/temp_xlsx_10b53360658e2.xlsx"
# the file is encrypted, we can not read it
try(wb <- wb_load(xlsx))
#> Error : Unable to open and load file: /tmp/Rtmp42ze8T/temp_xlsx_10b53360658e2.xlsx
# we have to decrypt it first
decrypt(xlsx, xlsx, pass = "msoc")
#> [1] "/tmp/Rtmp42ze8T/temp_xlsx_10b53360658e2.xlsx"
# now we can load it again
wb_load(xlsx)$to_df() |> head()
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> 2 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#> 3 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#> 4 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#> 5 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#> 6 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#> 7 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1This package is licensed under the BSD 3-Clause license and is based on
msoffice (by Cybozu Labs, Inc;
COPYRIGHT 2007-2015 and Shigeo Mitsunari;COPYRIGHT 2015-2023) and
cybozulib (by Cybozu Labs, Inc;
COPYRIGHT 2007-2012 and Shigeo Mitsunari; COPYRIGHT 2012-2023). Both
release under the BSD 3-Clause License.