plain text:Hello leon
password & iv:leon1234leon1234
cipher: rijndael cbc 128bits
nppcrypto encrypt info
<nppcrypt version="1016">
<encryption cipher="rijndael" key-length="16" mode="cbc" encoding="base64" />
<key algorithm="scrypt" N="16384" r="8" p="1" salt="HA==" />
<iv value="bGVvbjEyMzRsZW9uMTIzNA==" method="custom" />
</nppcrypt>
/8r4DGLVYC+YJSPMFQ8lFQ==
I use java BouncyCastle lib to test, but the encrypt result is diffent
related code is at my github repo
https://github.com/Leon406/Crypto/blob/master/src/main/kotlin/me/leon/modern/PBE.kt
nppcrypt plugin repo: https://github.com/jeanpaulrichter/nppcrypt
Edit: code here as well
package me.leon.modern
import com.lambdaworks.crypto.SCryptUtil
import me.leon.base64Decode
import me.leon.toBase64
import org.bouncycastle.crypto.generators.BCrypt
import org.bouncycastle.crypto.generators.KDF2BytesGenerator
import org.bouncycastle.crypto.generators.SCrypt
import org.bouncycastle.util.encoders.Hex
/**
*
*
* https://www.bouncycastle.org/specifications.html
* https://antofthy.gitlab.io/info/crypto/key_derivation.txt
* https://www.openssl.org/docs/manmaster/man1/openssl-kdf.html
* key derivation function
* SCrypt BCrypt PBKDF2 Added in OpenSSL 3.0
* Question? how to interact notepad++ nppcrypto
*/
object PBE {
@JvmStatic
fun main(args: Array<String>) {
val pwd = "leon1234leon1234"
val salt = "HA=="
val ivbase64 = "leon1234leon1234"
val key = SCrypt.generate(pwd.toByteArray(), salt.base64Decode(), 16384, 8, 1, 16).toBase64()
val key2 = BCrypt.generate(pwd.toByteArray(), "iP/MuFEP/jgHs7lBGez7kg==".base64Decode(), 8).toBase64()
println(key)
SCryptUtil.scrypt(pwd,16384,8,1).also {
println("scrypt $it")
}
//$s0$e0801$YzXui6dcQ0qbWnTBP36t+Q==$AW81b69h3HepUIi7pW7ThAKuDdpb1oZ7bFIJrF9zQzA=
//$s0$e0801$bGvjR0//WiaHqAiSDi5Q9g==$8DzAr+nhUyW5fhdj3MLIpovRdp+dLfVoXGqN+Pp3kZU=
SCrypt.generate(pwd.toByteArray(), "YzXui6dcQ0qbWnTBP36t+Q==".base64Decode(), 16384, 8, 1, 32).toBase64().also {
println("scrypt dd $it" )
}
val r = SymmetricCrypto.encrypt(key, "Hello leon", ivbase64, "AES/CBC/PKCS5Padding")
.also { println(it) }
val r2 = SymmetricCrypto.encrypt(key2, "Hello leon", ivbase64, "AES/CBC/PKCS5Padding")
.also { println(it) }
SymmetricCrypto.decrypt(key, r, ivbase64, "AES/CBC/PKCS5Padding").also { println(it) }
SymmetricCrypto.decrypt(key2, r2, ivbase64, "AES/CBC/PKCS5Padding").also { println(it) }
}
}