favetelinguis
Im writing an integration in Elixir and as one part I need to create an encrypted login string. However I have zero experience with encryption and im not able to understand the Erlang docs well enogh to understand. I would rather use pure Erlang to do this that add some dependency to a Elexir wrapper if possible.
The Java code I need to write in Elixir looks as follows.
private String encryptAuthParameter(String user, String password)
throws NoSuchAlgorithmException, InvalidKeySpecException, IOException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// Construct the base for the auth parameter
String login =
Base64.getEncoder().encodeToString(user.getBytes())
+ ":"
+ Base64.getEncoder().encodeToString(password.getBytes())
+ ":"
+ Base64.getEncoder()
.encodeToString(String.valueOf(System.currentTimeMillis()).getBytes());
// RSA encrypt it using NNAPI public key
PublicKey pubKey = getKeyFromPEM(Main.PUBLIC_KEY_FILENAME);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encryptedBytes = cipher.doFinal(login.getBytes("UTF-8"));
// Encode the encrypted data in Base64
String encodedEncryptedBytes = Base64.getEncoder().encodeToString(encryptedBytes);
return URLEncoder.encode(encodedEncryptedBytes, "UTF-8");
}
private static PublicKey getKeyFromPEM(String filename)
throws NoSuchAlgorithmException, InvalidKeySpecException, IOException {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String line = null;
String key = "";
while (true) {
line = reader.readLine();
if (line == null) break;
else if (line.startsWith("-----BEGIN PUBLIC KEY-----")) continue;
else if (line.startsWith("-----END PUBLIC KEY-----")) continue;
else key += line.trim();
}
byte[] binary = Base64.getDecoder().decode(key);
X509EncodedKeySpec spec = new X509EncodedKeySpec(binary);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(spec);
} finally {
if (reader != null) {
reader.close();
}
}
}
The only thing I have so far is:
def encryptAuthParameter(user, password) do
now = DateTime.utc_now() |> DateTime.to_unix(:millisecond) |> Integer.to_string()
# Convert to Base64
login = Base.encode64(user) <> ":" <> Base.encode64(password) <> ":" <> Base.encode64(now)
# Use public key to encode message
File.read!()
# Base 64 encode the encrypted string
login
end
Trending in Questions
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
Hello,
I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
Documentation
While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
So my question is quite simple and i have found no conclusive answer on forum, google or AI.
Should we use :erlang.float for Integer to ...
New
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New
Other Trending Topics
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex











Showing Posts 1 to 1- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
favetelinguis
Turns out it was not that hard. Here is the code that got it working.