javax.crypto.spec.PBEKeySpec Scala Examples
The following examples show how to use javax.crypto.spec.PBEKeySpec.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: Enigma.scala From matcher with MIT License | 6 votes |
package com.wavesplatform.dex.crypto import java.nio.charset.StandardCharsets import java.security.NoSuchAlgorithmException import java.security.spec.InvalidKeySpecException import javax.crypto.spec.{PBEKeySpec, SecretKeySpec} import javax.crypto.{Cipher, SecretKeyFactory} import scala.util.control.NonFatal object Enigma { private[this] val KeySalt = "0495c728-1614-41f6-8ac3-966c22b4a62d".getBytes(StandardCharsets.UTF_8) private[this] val AES = "AES" private[this] val Algorithm = AES + "/ECB/PKCS5Padding" private[this] val HashingIterations = 999999 private[this] val KeySizeBits = 128 def hashPassword(password: Array[Char], salt: Array[Byte], iterations: Int = HashingIterations, keyLength: Int = KeySizeBits, hashingAlgorithm: String = "PBKDF2WithHmacSHA512"): Array[Byte] = try { val keyFactory = SecretKeyFactory.getInstance(hashingAlgorithm) val keySpec = new PBEKeySpec(password, salt, iterations, keyLength) val key = keyFactory.generateSecret(keySpec) key.getEncoded } catch { case e @ (_: NoSuchAlgorithmException | _: InvalidKeySpecException) => throw new RuntimeException("Password hashing error", e) } def prepareDefaultKey(password: String): SecretKeySpec = new SecretKeySpec(hashPassword(password.toCharArray, KeySalt), AES) def encrypt(key: SecretKeySpec, bytes: Array[Byte]): Array[Byte] = try { val cipher = Cipher.getInstance(Algorithm) cipher.init(Cipher.ENCRYPT_MODE, key) cipher.doFinal(bytes) } catch { case NonFatal(e) => throw new RuntimeException("Encrypt error", e) } def decrypt(key: SecretKeySpec, encryptedBytes: Array[Byte]): Array[Byte] = try { val cipher: Cipher = Cipher.getInstance(Algorithm) cipher.init(Cipher.DECRYPT_MODE, key) cipher.doFinal(encryptedBytes) } catch { case NonFatal(e) => throw new RuntimeException("Decrypt error", e) } }
Example 2
Source File: PBKDF2.scala From bitcoin-s with MIT License | 5 votes |
package org.bitcoins.crypto import javax.crypto.spec.PBEKeySpec import javax.crypto.{SecretKey, SecretKeyFactory} import scodec.bits.ByteVector def withSha512( bytes: ByteVector, salt: ByteVector, iterationCount: Int, derivedKeyLength: Int): SecretKey = { val keySpec = new PBEKeySpec( bytes.toArray.map(_.toChar), salt.toArray, iterationCount, derivedKeyLength ) secretKeyFactory.generateSecret(keySpec) } }
Example 3
Source File: Crypto.scala From tepkin with Apache License 2.0 | 5 votes |
package net.fehmicansaglam.tepkin.util import java.security.MessageDigest import javax.crypto.spec.{PBEKeySpec, SecretKeySpec} import javax.crypto.{Mac, SecretKeyFactory} import net.fehmicansaglam.bson.util.Codec trait Crypto extends Codec { def sha1(value: String): String = { val digest = sha1(value.getBytes("UTF-8")) encodeBase64(digest) } def sha1(value: Array[Byte]): Array[Byte] = { MessageDigest.getInstance("SHA-1").digest(value) } def hmac(value: Array[Byte], key: String): Array[Byte] = { val signingKey = new SecretKeySpec(value, "HmacSHA1") val mac = Mac.getInstance("HmacSHA1") mac.init(signingKey) mac.doFinal(decodeUtf8(key)) } def keyDerive(password: String, salt: Array[Byte], iterations: Int): Array[Byte] = { val spec = new PBEKeySpec(password.toCharArray, salt, iterations, 20 * 8 ) val keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1") keyFactory.generateSecret(spec).getEncoded } def xor(as: Array[Byte], bs: Array[Byte]): Array[Byte] = { as.zip(bs).map { case (a, b) => (a ^ b).toByte } } } object Crypto extends Crypto
Example 4
Source File: JsonFileStorage.scala From Waves with MIT License | 5 votes |
package com.wavesplatform.utils import java.io.{File, PrintWriter} import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec import play.api.libs.json.{Json, Reads, Writes} import java.util.Base64 import scala.io.Source import scala.util.control.NonFatal object JsonFileStorage { private[this] val KeySalt = "0495c728-1614-41f6-8ac3-966c22b4a62d" private[this] val AES = "AES" private[this] val Algorithm = AES + "/ECB/PKCS5Padding" private[this] val HashingAlgorithm = "PBKDF2WithHmacSHA512" private[this] val HashingIterations = 999999 private[this] val KeySizeBits = 128 def prepareKey(key: String): SecretKeySpec = { import java.security.NoSuchAlgorithmException import java.security.spec.InvalidKeySpecException import javax.crypto.SecretKeyFactory import javax.crypto.spec.PBEKeySpec def hashPassword(password: Array[Char], salt: Array[Byte], iterations: Int, keyLength: Int): Array[Byte] = try { val keyFactory = SecretKeyFactory.getInstance(HashingAlgorithm) val keySpec = new PBEKeySpec(password, salt, iterations, keyLength) val key = keyFactory.generateSecret(keySpec) key.getEncoded } catch { case e @ (_: NoSuchAlgorithmException | _: InvalidKeySpecException) => throw new RuntimeException("Password hashing error", e) } new SecretKeySpec(hashPassword(key.toCharArray, KeySalt.utf8Bytes, HashingIterations, KeySizeBits), AES) } def save[T](value: T, path: String, key: Option[SecretKeySpec])(implicit w: Writes[T]): Unit = { val folder = new File(path).getParentFile if (!folder.exists()) folder.mkdirs() val file = new PrintWriter(path) try { val json = Json.toJson(value).toString() val data = key.fold(json)(k => encrypt(k, json)) file.write(data) } finally file.close() } def save[T](value: T, path: String)(implicit w: Writes[T]): Unit = save(value, path, None) def load[T](path: String, key: Option[SecretKeySpec] = None)(implicit r: Reads[T]): T = { val file = Source.fromFile(path) try { val dataStr = file.mkString Json.parse(key.fold(dataStr)(k => decrypt(k, dataStr))).as[T] } finally file.close() } def load[T](path: String)(implicit r: Reads[T]): T = load(path, Option.empty[SecretKeySpec])(r) private[this] def encrypt(key: SecretKeySpec, value: String): String = { try { val cipher: Cipher = Cipher.getInstance(Algorithm) cipher.init(Cipher.ENCRYPT_MODE, key) new String(Base64.getEncoder.encode(cipher.doFinal(value.utf8Bytes))) } catch { case NonFatal(e) => throw new RuntimeException("File storage encrypt error", e) } } private[this] def decrypt(key: SecretKeySpec, encryptedValue: String): String = { try { val cipher: Cipher = Cipher.getInstance(Algorithm) cipher.init(Cipher.DECRYPT_MODE, key) new String(cipher.doFinal(Base64.getDecoder.decode(encryptedValue))) } catch { case NonFatal(e) => throw new RuntimeException("File storage decrypt error", e) } } }
Example 5
Source File: crypto.scala From pfps-shopping-cart with Apache License 2.0 | 5 votes |
package shop.algebras import cats.effect.Sync import cats.implicits._ import javax.crypto.spec.{ PBEKeySpec, SecretKeySpec } import javax.crypto.{ Cipher, SecretKeyFactory } import shop.config.data.PasswordSalt import shop.domain.auth._ trait Crypto { def encrypt(value: Password): EncryptedPassword def decrypt(value: EncryptedPassword): Password } object LiveCrypto { def make[F[_]: Sync](secret: PasswordSalt): F[Crypto] = Sync[F] .delay { val salt = secret.value.value.value.getBytes("UTF-8") val keySpec = new PBEKeySpec("password".toCharArray(), salt, 65536, 256) val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1") val bytes = factory.generateSecret(keySpec).getEncoded val sKeySpec = new SecretKeySpec(bytes, "AES") val eCipher = EncryptCipher(Cipher.getInstance("AES")) eCipher.value.init(Cipher.ENCRYPT_MODE, sKeySpec) val dCipher = DecryptCipher(Cipher.getInstance("AES")) dCipher.value.init(Cipher.DECRYPT_MODE, sKeySpec) (eCipher, dCipher) } .map { case (ec, dc) => new LiveCrypto(ec, dc) } } final class LiveCrypto private ( eCipher: EncryptCipher, dCipher: DecryptCipher ) extends Crypto { // Workaround for PostgreSQL ERROR: invalid byte sequence for encoding "UTF8": 0x00 private val Key = "=DownInAHole=" def encrypt(password: Password): EncryptedPassword = { val bytes = password.value.getBytes("UTF-8") val result = new String(eCipher.value.doFinal(bytes), "UTF-8") val removeNull = result.replaceAll("\\u0000", Key) EncryptedPassword(removeNull) } def decrypt(password: EncryptedPassword): Password = { val bytes = password.value.getBytes("UTF-8") val result = new String(dCipher.value.doFinal(bytes), "UTF-8") val insertNull = result.replaceAll(Key, "\\u0000") Password(insertNull) } }