SlideShare a Scribd company logo
1 of 68
Basic understanding of
cryptographic concepts and
how they’re done in
Cryptography (or cryptology; from Greek
κρυπτός, kryptos, "hidden, secret"; and
γράφ, gráph, "writing", or -λογία, -logia,
respectively) is the practice and study of
hiding information.
https://en.wikipedia.org/wiki/Outline_of_cryptography
What does cryptography solve?
Confidentiality Integrity Authenticity
Contemporary cryptography
Symmetric encryption Asymmetric encryption
Hashing
JCA
(Java Cryptography Architecture)
JCE
(Java Cryptography Extension)
https://sites.google.com/site/lbathen/research/bouncy_castle
How to plug in a security provider
• JDK8 and previous:
• Update jre/lib/security/java.security
• Place specific provider JAR in lib/ext
• JDK9 and onwards:
• Update conf/security/java.security
• Place specific provider JAR on classpath
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.specificprovider.SpecificProvider
Or register it in
java.security file
Security.addProvider(new SpecificProvider());
(extends java.security.Provider)
JCA /JCE API Summary
Interface / class Function
Security Provider configuration
KeyGenerator Generates symmetric keys
Key Represents key material
Cipher Encryption algorithm
SecretKeyFactory Converts symmetric key material to
SecretKey abstraction
KeyPairGenerator Generates public / private keys
KeyPair Public / private keypair
KeyFactory Converts public / private material to Key
abstraction
KeyStore Storing mechanism for keys and
certificates
MessageDigest Hashing.
HMAC Combines hashing and encryption
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Today we’re going to cover:
Hashing
(digest)
Deterministic
Fixed size
One-way
Psuedo
Random
Collision chance: 10^13 years
Hashing
Age of the universe: 13.7x10^9
Algorithms
MD-5 (hash size 128 bits)
SHA-1 (hash size 160 bits)
SHA-256 (hash size 256 bits)
Hashing
My message
digest
68B1282B91DE2C054C36629CB8DD447F12F0
96D3E3C587978DC2248444633483
MessageDigest
static
getInstance(“SHA-256”)
Hashing
DEMO
Hashing
Password hashing
Hashing
Bitcoin block mining
transaction{from: michel, to: devoxx, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
random: 0
transaction{from: michel, to: devoxx, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
random: 1
transaction{from: michel, to: devoxx, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
random: 2
random++
random++
Bitcoin block mining
SHA-256 000084E534…..
SHA-256 D63C34F5D6…..
SHA-256 23A984E534…..
Hash of a block should start with 0000….
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Symmetric encryption
Symmetric encryption
“ Devoxx!! ”
3H6V3E98
Encryption
AlgorithmB4 C3 F8 32 87 A9 6E
• DES (Data Encryption Standard)
• block size 64 bits
• key size 56 bits
• AES (Advanced Encryption Standard)
• block size 128 bits
• key size 128/ 192 / 256 bits
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Symmetric encryption
Algorithms
Symmetric encryption in
KeyGenerator
Key
generateKey(keySize, for example 192)
Cipher
init(key)*
My message
doFinal
4fg67d34lk4lk
static
getInstance(“AES”)
static
getInstance(“AES”)
Key
Key size restrictions
“Illegal key size...” (calling init with keysize 192)
Limit on key sizes outside USA
• Install “unlimited strength jurisdiction policy files”
• /jre/lib/security/local_policy.jar, export_policy.jar
Java 8u152 includes unlimited strength jars
Java 8u162 and up have unlimited strength by default
https://golb.hplar.ch/2017/10/JCE-policy-changes-in-Java-SE-8u151-and-8u152.html
DEMO
AES Encryption (with ECB)
Electronic CopyBook Encryption (ECB)
devoxx!! devoxx!! devoxx!
!
12345678 12345678 12345678
Cipher Block Chaining
(IV)
Symmetric encryption with IV in
SecureRandom
IvParameterSpec
nextBytes(array)
init init
My message
doFinal
4fg67d34lk4lk
KeyGenerator
Key
generateKey (192)
static
getInstance
(“AES”)
Cipher
Static
getInstance
(“AES”)
static
getInstance(“SHA1PRNG”)
DEMO
AES Encryption with CBC
Application: Encrypt a Wallet (or zip file)
“myPassword” PBKDF2 SHA256 AES
Password-Based Key
Derivation Function
Key exchange
Martin
Hellman
Whitfield
Diffie
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Asymmetric keys
(public key cryptography)
Public key algorithms
• Diffie-Hellman key agreement protocol
• RSA (Rivest-Shamir-Adleman) – key size 1024,2048, 3072
• ECC (Elliptic Curve Cryptography) – keysize 128
Asymmetric cryptography in
KeyPair
generateKeyPair
init(keyPair.getPrivate())
Cipher
init(keyPair.getPublic())
KeyPairGenerator
static
getInstance(“RSA”)
Cipher
static
getInstance(“RSA”)
My message
doFinal
4fg67d34lk4lk
My message
doFinal
Demo
RSA Encryption
Don’t use Asymmetric encryption to encrypt large blocks of data
RSA in particular is slow
…but you CAN use it for…
• Agreeing on symmetric keys (Diffie-Hellman)
• Encryting / Decrypting symmetric keys
• Encrypting hashes, or message digests (Digital Signature)
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Encryption solves the problem of confidentiality…
…But not integrity
Digital signatures
HMAC - Digital signature using symmetric encryption
Digital signatures in
KeyGenerator
static
getInstance(“HMACSha256”)
Mac
static
getInstance(“HMACSha256”)
Key
generateKey(keySize)
Init(key)
My message
4fg67d34lk4lk Signature
Digital signature using asymmetric encryption
Digital signatures in
KeyPair
generateKeyPair
init(keyPair.getPrivate())
Signature
init(keyPair.getPublic())
KeyPairGenerator
static
getInstance(“RSA”)
Signature
static
getInstance(“RSA”)
My message
sign
4fg67d34lk4lk
verify
update
Demo
Digital signature
Signing crypto transactions
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
We’ve seen…
• Confidentiality (encryption)
• Integrity (digital signatures)
… but what about authenticity?
https://www.jscape.com/hubfs/images/csr-ca-signed-server-certificate.png
JCA Keystore
myKeystore.jks
Keystore keyStore = keyStore.getInstance(“JKS”);
keyStore.load(inputstream, keystorepassword);
Key key = keyStore.getKey(alias, keypassword);
Certificate certificate = keyStore.getCertificate(alias);
keytool.exe
*.JKS
*.JCEKS
*.PKCS12 Generate keys
Import/export certs
Create CSR
Keytool.exe
• Generate keypair
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -
storepass password -validity 360 -keysize 2048
• Generate certificate request
keytool -certreq -alias selfsigned -keystore keystore.jks -storepass
password
• Export certificate
• keytool -exportcert -keystore keystore.jks -storepass password -alias
selfsigned > out.cer
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
https://www.cryptologie.net/article/340/tls-pre-master-secrets-and-master-secrets/
• Diffie-Hellman
• RSA
Send certificate
Encrypt with
Public key / DH
Decrypt with
Private key /DH
Generate symmetric
key
Generate symmetric
key
AES Encryption
AES Encryption
HTTPS
Validate certificate
Check digital
signature
Basic understanding of
cryptographic concepts and
how they’re done in
@MichelSchudel
michel@craftsmen.nl
https://github.com/MichelSchudel/crypto-demo
Demo slides
KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
generator.init(192);
Key key = generator.generateKey();
Obtain a key
Init the algorithm with the key
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
Encrypt the data
byte[] encryptedOutput = cipher.doFinal(“Hello, devoxx!!!”.getBytes());
CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A
cipher.init(Cipher.DECRYPT_MODE, key);
cipher.doFinal(CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 4
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4
Decrypting
hello, devoxx
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
Key pub = kp.getPublic();
Key pvt = kp.getPrivate();
Obtain a key
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(message.getBytes());
Encryption
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(keyPair.getPrivate());
dsa.update(“Hi devoxx!!!!”.getBytes());
byte[] signature = dsa.sign();
Creating a digital signature of a payload
Signature dsa = Signature.getInstance("SHA256withRSA ");
dsa.initVerify(kp.getPublic());
dsa.update(“Hi devoxx!!!!”.getBytes());
boolean signatureIsOk = dsa.verify(signature);
Verifying a signature
KeyGenerator generator = KeyGenerator.getInstance("HMACSha256");
Key key = generator.generateKey();
// create signature
Mac mac = Mac.getInstance("HMACSha256");
mac.init(key);
byte[] input = "Hello, world!".getBytes();
byte[] signature = mac.doFinal(input);
// validation of signature
byte[] recievedInput = "Hello, world! ".getBytes();
byte[] newSignature = mac.doFinal(recievedInput);
// now compare newly generated signature with received signature
assertEquals(new String(signature), new String(newSignature));
Symmetric signing (HMAC)
MessageDigest digester = MessageDigest.getInstance("SHA-256“);
Obtain a hash function
Put some data in the function
digester.update(“Hi there”.getBytes());
Digest the data
digester.digest();
68 B1 28 2B 91 DE 2C 05 4C 36 62 9C B8 DD 44 7F 12 F0 96 D3 E3 C5 87 97 8D C2 24 84 44 63 34 83

More Related Content

What's hot

11. using regular expressions with oracle database
11. using regular expressions with oracle database11. using regular expressions with oracle database
11. using regular expressions with oracle database
Amrit Kaur
 
Testing Frameworks And Methodologies
Testing Frameworks And MethodologiesTesting Frameworks And Methodologies
Testing Frameworks And Methodologies
Steven Cahill
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architecture
Amit Bhalla
 

What's hot (20)

11. using regular expressions with oracle database
11. using regular expressions with oracle database11. using regular expressions with oracle database
11. using regular expressions with oracle database
 
Testing Frameworks And Methodologies
Testing Frameworks And MethodologiesTesting Frameworks And Methodologies
Testing Frameworks And Methodologies
 
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...
 
PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVM
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architecture
 
Secure PHP Coding
Secure PHP CodingSecure PHP Coding
Secure PHP Coding
 
PL/SQL TRIGGERS
PL/SQL TRIGGERSPL/SQL TRIGGERS
PL/SQL TRIGGERS
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas Hunter
 
CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)
 
Building ClickHouse and Making Your First Contribution: A Tutorial_06.10.2021
Building ClickHouse and Making Your First Contribution: A Tutorial_06.10.2021Building ClickHouse and Making Your First Contribution: A Tutorial_06.10.2021
Building ClickHouse and Making Your First Contribution: A Tutorial_06.10.2021
 
Sw quality metrics
Sw quality metricsSw quality metrics
Sw quality metrics
 
Security Code Review 101
Security Code Review 101Security Code Review 101
Security Code Review 101
 
Alfresco devcon 2019: How to track user activities without using the audit fu...
Alfresco devcon 2019: How to track user activities without using the audit fu...Alfresco devcon 2019: How to track user activities without using the audit fu...
Alfresco devcon 2019: How to track user activities without using the audit fu...
 
Various Types of OpenSSL Commands and Keytool
Various Types of OpenSSL Commands and KeytoolVarious Types of OpenSSL Commands and Keytool
Various Types of OpenSSL Commands and Keytool
 
Important SQLMap commands
Important SQLMap commandsImportant SQLMap commands
Important SQLMap commands
 
bm25 demystified
bm25 demystifiedbm25 demystified
bm25 demystified
 
Kafka Tutorial: Kafka Security
Kafka Tutorial: Kafka SecurityKafka Tutorial: Kafka Security
Kafka Tutorial: Kafka Security
 
Logstash
LogstashLogstash
Logstash
 

Similar to Cryptography 101 for Java developers

Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
phanleson
 

Similar to Cryptography 101 for Java developers (20)

Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019
 
Cryptography 101 for Java Developers - JavaZone2019
Cryptography 101 for Java Developers - JavaZone2019Cryptography 101 for Java Developers - JavaZone2019
Cryptography 101 for Java Developers - JavaZone2019
 
Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015
 
Cryptography 101 for Java Developers - Devoxx 2019
Cryptography 101 for Java Developers - Devoxx 2019Cryptography 101 for Java Developers - Devoxx 2019
Cryptography 101 for Java Developers - Devoxx 2019
 
Cryptography 101 for Java developers
Cryptography 101 for Java developersCryptography 101 for Java developers
Cryptography 101 for Java developers
 
Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010
 
Python Cryptography & Security
Python Cryptography & SecurityPython Cryptography & Security
Python Cryptography & Security
 
Django cryptography
Django cryptographyDjango cryptography
Django cryptography
 
Cargo Cult Security at OpenWest
Cargo Cult Security at OpenWestCargo Cult Security at OpenWest
Cargo Cult Security at OpenWest
 
Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18
 
Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
 
Implement symmetric key algorithms.pptx
Implement symmetric key algorithms.pptxImplement symmetric key algorithms.pptx
Implement symmetric key algorithms.pptx
 
Encryption Boot Camp at Øredev
Encryption Boot Camp at ØredevEncryption Boot Camp at Øredev
Encryption Boot Camp at Øredev
 
Introduction to Public Key Cryptography
Introduction to Public Key CryptographyIntroduction to Public Key Cryptography
Introduction to Public Key Cryptography
 
Data Security Essentials - JavaOne 2013
Data Security Essentials - JavaOne 2013Data Security Essentials - JavaOne 2013
Data Security Essentials - JavaOne 2013
 
Dodging WebCrypto API Landmines
Dodging WebCrypto API LandminesDodging WebCrypto API Landmines
Dodging WebCrypto API Landmines
 
Cryptography In Silverlight
Cryptography In SilverlightCryptography In Silverlight
Cryptography In Silverlight
 
Security via Java
Security via JavaSecurity via Java
Security via Java
 
Hadoop Security Now and Future
Hadoop Security Now and FutureHadoop Security Now and Future
Hadoop Security Now and Future
 
Security and Encryption on iOS
Security and Encryption on iOSSecurity and Encryption on iOS
Security and Encryption on iOS
 

More from Michel Schudel

More from Michel Schudel (12)

Testing an onion architecture - done right
Testing an onion architecture - done rightTesting an onion architecture - done right
Testing an onion architecture - done right
 
What makes a high performance team tick?
What makes a high performance team tick?What makes a high performance team tick?
What makes a high performance team tick?
 
Atonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentieAtonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentie
 
Spring boot Under Da Hood
Spring boot Under Da HoodSpring boot Under Da Hood
Spring boot Under Da Hood
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
Micronaut brainbit
Micronaut brainbitMicronaut brainbit
Micronaut brainbit
 
Java n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slidesJava n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slides
 
Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!
 
Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
Java 9 overview
Java 9 overviewJava 9 overview
Java 9 overview
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 

Cryptography 101 for Java developers