diff --git a/src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProvider.java b/src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProvider.java
similarity index 89%
rename from src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProvider.java
rename to src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProvider.java
index 001bb68..2f9af7a 100644
--- a/src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProvider.java
+++ b/src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProvider.java
@@ -48,11 +48,11 @@
     }
 )
 @Designate(
-    ocd = PBESecretKeyProviderConfiguration.class,
+    ocd = PbeSecretKeyProviderConfiguration.class,
     factory = true
 )
 @SuppressWarnings({"java:S1117", "java:S3077"})
-public final class PBESecretKeyProvider implements SecretKeyProvider {
+public final class PbeSecretKeyProvider implements SecretKeyProvider {
 
     @Reference
     private volatile PasswordProvider passwordProvider;
@@ -60,24 +60,24 @@
     @Reference
     private volatile SaltProvider saltProvider;
 
-    private PBESecretKeyProviderConfiguration configuration;
+    private PbeSecretKeyProviderConfiguration configuration;
 
     private SecretKeyFactory factory;
 
-    private final Logger logger = LoggerFactory.getLogger(PBESecretKeyProvider.class);
+    private final Logger logger = LoggerFactory.getLogger(PbeSecretKeyProvider.class);
 
-    public PBESecretKeyProvider() { //
+    public PbeSecretKeyProvider() { //
     }
 
     @Activate
-    protected void activate(final PBESecretKeyProviderConfiguration configuration) throws NoSuchAlgorithmException {
+    protected void activate(final PbeSecretKeyProviderConfiguration configuration) throws NoSuchAlgorithmException {
         logger.debug("activating");
         this.configuration = configuration;
         factory = SecretKeyFactory.getInstance(configuration.algorithm());
     }
 
     @Modified
-    protected void modified(final PBESecretKeyProviderConfiguration configuration) throws NoSuchAlgorithmException {
+    protected void modified(final PbeSecretKeyProviderConfiguration configuration) throws NoSuchAlgorithmException {
         logger.debug("modifying");
         this.configuration = configuration;
         factory = SecretKeyFactory.getInstance(configuration.algorithm());
diff --git a/src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderConfiguration.java b/src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderConfiguration.java
similarity index 98%
rename from src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderConfiguration.java
rename to src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderConfiguration.java
index 5562b6c..f4ea18f 100644
--- a/src/main/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderConfiguration.java
+++ b/src/main/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderConfiguration.java
@@ -26,7 +26,7 @@
     description = "Provides secret keys for password-based encryption (PBE)"
 )
 @SuppressWarnings("java:S100")
-@interface PBESecretKeyProviderConfiguration {
+@interface PbeSecretKeyProviderConfiguration {
 
     @AttributeDefinition(
         name = "Names",
diff --git a/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoService.java b/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoService.java
similarity index 92%
rename from src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoService.java
rename to src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoService.java
index 2bbf3a9..2f0a8f7 100644
--- a/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoService.java
+++ b/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoService.java
@@ -48,11 +48,11 @@
     }
 )
 @Designate(
-    ocd = JasyptStandardPBEStringCryptoServiceConfiguration.class,
+    ocd = JasyptStandardPbeStringCryptoServiceConfiguration.class,
     factory = true
 )
 @SuppressWarnings({"java:S1117", "java:S3077", "java:S6212"})
-public final class JasyptStandardPBEStringCryptoService implements CryptoService {
+public final class JasyptStandardPbeStringCryptoService implements CryptoService {
 
     @Reference
     private volatile PasswordProvider passwordProvider;
@@ -72,19 +72,19 @@
 
     private StandardPBEStringEncryptor encryptor;
 
-    private final Logger logger = LoggerFactory.getLogger(JasyptStandardPBEStringCryptoService.class);
+    private final Logger logger = LoggerFactory.getLogger(JasyptStandardPbeStringCryptoService.class);
 
-    public JasyptStandardPBEStringCryptoService() { //
+    public JasyptStandardPbeStringCryptoService() { //
     }
 
     @Activate
-    protected void activate(final JasyptStandardPBEStringCryptoServiceConfiguration configuration) {
+    protected void activate(final JasyptStandardPbeStringCryptoServiceConfiguration configuration) {
         logger.debug("activating");
         setupEncryptor(configuration);
     }
 
     @Modified
-    protected void modified(final JasyptStandardPBEStringCryptoServiceConfiguration configuration) {
+    protected void modified(final JasyptStandardPbeStringCryptoServiceConfiguration configuration) {
         logger.debug("modifying");
         setupEncryptor(configuration);
     }
@@ -94,7 +94,7 @@
         logger.debug("deactivating");
     }
 
-    private void setupEncryptor(final JasyptStandardPBEStringCryptoServiceConfiguration configuration) {
+    private void setupEncryptor(final JasyptStandardPbeStringCryptoServiceConfiguration configuration) {
         final String algorithm = configuration.algorithm();
         final Set<?> algorithms = AlgorithmRegistry.getAllPBEAlgorithms();
         if (!algorithms.contains(algorithm)) {
diff --git a/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceConfiguration.java b/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceConfiguration.java
similarity index 98%
rename from src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceConfiguration.java
rename to src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceConfiguration.java
index 1f0b0fd..c6f70c4 100644
--- a/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceConfiguration.java
+++ b/src/main/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceConfiguration.java
@@ -31,7 +31,7 @@
     description = "Crypto service which uses Jasypt StandardPBEStringEncryptor for encryption and decryption"
 )
 @SuppressWarnings("java:S100")
-@interface JasyptStandardPBEStringCryptoServiceConfiguration {
+@interface JasyptStandardPbeStringCryptoServiceConfiguration {
 
     @AttributeDefinition(
         name = "Names",
diff --git a/src/test/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderTest.java b/src/test/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderTest.java
similarity index 85%
rename from src/test/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderTest.java
rename to src/test/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderTest.java
index b3d4263..7d5522c 100644
--- a/src/test/java/org/apache/sling/commons/crypto/internal/PBESecretKeyProviderTest.java
+++ b/src/test/java/org/apache/sling/commons/crypto/internal/PbeSecretKeyProviderTest.java
@@ -32,14 +32,14 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class PBESecretKeyProviderTest {
+public class PbeSecretKeyProviderTest {
 
     @Rule
     public ExpectedException exception = ExpectedException.none();
 
     @Test
     public void testMissingConfiguration() {
-        final PBESecretKeyProvider provider = new PBESecretKeyProvider();
+        final PbeSecretKeyProvider provider = new PbeSecretKeyProvider();
         exception.expect(NullPointerException.class);
         exception.expectMessage("Configuration must not be null");
         provider.getSecretKey();
@@ -47,8 +47,8 @@
 
     @Test
     public void testInvalidAlgorithm() throws NoSuchAlgorithmException {
-        final PBESecretKeyProvider provider = new PBESecretKeyProvider();
-        final PBESecretKeyProviderConfiguration configuration = mock(PBESecretKeyProviderConfiguration.class);
+        final PbeSecretKeyProvider provider = new PbeSecretKeyProvider();
+        final PbeSecretKeyProviderConfiguration configuration = mock(PbeSecretKeyProviderConfiguration.class);
         when(configuration.algorithm()).thenReturn("Invalid");
         exception.expect(NoSuchAlgorithmException.class);
         provider.activate(configuration);
@@ -60,11 +60,11 @@
         when(passwordProvider.getPassword()).thenReturn("+AQ?aDes!'DBMkrCi:FE6q\\sOn=Pbmn=PK8n=PK?".toCharArray());
         final SaltProvider saltProvider = mock(SaltProvider.class);
         when(saltProvider.getSalt()).thenReturn("CAFEBABECAFEDEAD".getBytes(StandardCharsets.UTF_8));
-        final PBESecretKeyProvider provider = new PBESecretKeyProvider();
+        final PbeSecretKeyProvider provider = new PbeSecretKeyProvider();
         FieldUtils.writeDeclaredField(provider, "passwordProvider", passwordProvider, true);
         FieldUtils.writeDeclaredField(provider, "saltProvider", saltProvider, true);
 
-        final PBESecretKeyProviderConfiguration configuration = mock(PBESecretKeyProviderConfiguration.class);
+        final PbeSecretKeyProviderConfiguration configuration = mock(PbeSecretKeyProviderConfiguration.class);
         when(configuration.algorithm()).thenReturn("PBKDF2WithHmacSHA1");
         when(configuration.iterationCount()).thenReturn(-1);
         when(configuration.keyLength()).thenReturn(-1);
@@ -80,11 +80,11 @@
         when(passwordProvider.getPassword()).thenReturn("+AQ?aDes!'DBMkrCi:FE6q\\sOn=Pbmn=PK8n=PK?".toCharArray());
         final SaltProvider saltProvider = mock(SaltProvider.class);
         when(saltProvider.getSalt()).thenReturn("CAFEBABECAFEDEAD".getBytes(StandardCharsets.UTF_8));
-        final PBESecretKeyProvider provider = new PBESecretKeyProvider();
+        final PbeSecretKeyProvider provider = new PbeSecretKeyProvider();
         FieldUtils.writeDeclaredField(provider, "passwordProvider", passwordProvider, true);
         FieldUtils.writeDeclaredField(provider, "saltProvider", saltProvider, true);
         { // activate
-            final PBESecretKeyProviderConfiguration configuration = mock(PBESecretKeyProviderConfiguration.class);
+            final PbeSecretKeyProviderConfiguration configuration = mock(PbeSecretKeyProviderConfiguration.class);
             when(configuration.algorithm()).thenReturn("PBKDF2WithHmacSHA1");
             when(configuration.iterationCount()).thenReturn(1024);
             when(configuration.keyLength()).thenReturn(128);
@@ -92,7 +92,7 @@
             assertThat(provider.getSecretKey().getAlgorithm()).isEqualTo("PBKDF2WithHmacSHA1");
         }
         { // modified
-            final PBESecretKeyProviderConfiguration configuration = mock(PBESecretKeyProviderConfiguration.class);
+            final PbeSecretKeyProviderConfiguration configuration = mock(PbeSecretKeyProviderConfiguration.class);
             when(configuration.algorithm()).thenReturn("PBKDF2WithHmacSHA256");
             when(configuration.iterationCount()).thenReturn(2048);
             when(configuration.keyLength()).thenReturn(256);
diff --git a/src/test/java/org/apache/sling/commons/crypto/it/tests/PBESecretKeyProviderIT.java b/src/test/java/org/apache/sling/commons/crypto/it/tests/PbeSecretKeyProviderIT.java
similarity index 96%
rename from src/test/java/org/apache/sling/commons/crypto/it/tests/PBESecretKeyProviderIT.java
rename to src/test/java/org/apache/sling/commons/crypto/it/tests/PbeSecretKeyProviderIT.java
index 66d3583..e50ffb2 100644
--- a/src/test/java/org/apache/sling/commons/crypto/it/tests/PBESecretKeyProviderIT.java
+++ b/src/test/java/org/apache/sling/commons/crypto/it/tests/PbeSecretKeyProviderIT.java
@@ -38,7 +38,7 @@
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
-public class PBESecretKeyProviderIT extends CryptoTestSupport {
+public class PbeSecretKeyProviderIT extends CryptoTestSupport {
 
     @Inject
     @Filter(value = "(names=messaging)")
@@ -55,7 +55,7 @@
             factoryConfiguration("org.apache.sling.commons.crypto.internal.SecureRandomSaltProvider")
                 .put("keyLength", 16)
                 .asOption(),
-            factoryConfiguration("org.apache.sling.commons.crypto.internal.PBESecretKeyProvider")
+            factoryConfiguration("org.apache.sling.commons.crypto.internal.PbeSecretKeyProvider")
                 .put("names", "messaging")
                 .put("algorithm", "PBKDF2WithHmacSHA256")
                 .asOption()
diff --git a/src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPBEStringCryptoServiceIT.java b/src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPbeStringCryptoServiceIT.java
similarity index 95%
rename from src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPBEStringCryptoServiceIT.java
rename to src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPbeStringCryptoServiceIT.java
index 1f7bda5..9d00365 100644
--- a/src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPBEStringCryptoServiceIT.java
+++ b/src/test/java/org/apache/sling/commons/crypto/it/tests/jasypt/JasyptStandardPbeStringCryptoServiceIT.java
@@ -36,7 +36,7 @@
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
-public class JasyptStandardPBEStringCryptoServiceIT extends JasyptCryptoTestSupport {
+public class JasyptStandardPbeStringCryptoServiceIT extends JasyptCryptoTestSupport {
 
     @Inject
     private CryptoService cryptoService;
@@ -46,7 +46,7 @@
         final String path = String.format("%s/src/test/resources/password.ascii85", PathUtils.getBaseDir());
         return options(
             baseConfiguration(),
-            factoryConfiguration("org.apache.sling.commons.crypto.jasypt.internal.JasyptStandardPBEStringCryptoService")
+            factoryConfiguration("org.apache.sling.commons.crypto.jasypt.internal.JasyptStandardPbeStringCryptoService")
                 .put("algorithm", "PBEWITHHMACSHA512ANDAES_256")
                 .asOption(),
             factoryConfiguration("org.apache.sling.commons.crypto.jasypt.internal.JasyptRandomIvGeneratorRegistrar")
diff --git a/src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceTest.java b/src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceTest.java
similarity index 86%
rename from src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceTest.java
rename to src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceTest.java
index ec9a236..b3f89eb 100644
--- a/src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPBEStringCryptoServiceTest.java
+++ b/src/test/java/org/apache/sling/commons/crypto/jasypt/internal/JasyptStandardPbeStringCryptoServiceTest.java
@@ -34,7 +34,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class JasyptStandardPBEStringCryptoServiceTest {
+public class JasyptStandardPbeStringCryptoServiceTest {
 
     private static final String MESSAGE = "Rudy, a Message to You";
 
@@ -42,11 +42,11 @@
     public void testComponentLifecycle() throws IllegalAccessException {
         final PasswordProvider passwordProvider = mock(PasswordProvider.class);
         when(passwordProvider.getPassword()).thenReturn("+AQ?aDes!'DBMkrCi:FE6q\\sOn=Pbmn=PK8n=PK?".toCharArray());
-        final JasyptStandardPBEStringCryptoService service = new JasyptStandardPBEStringCryptoService();
+        final JasyptStandardPbeStringCryptoService service = new JasyptStandardPbeStringCryptoService();
         FieldUtils.writeDeclaredField(service, "passwordProvider", passwordProvider, true);
         FieldUtils.writeDeclaredField(service, "ivGenerator", new RandomIvGenerator(), true);
         { // activate
-            final JasyptStandardPBEStringCryptoServiceConfiguration configuration = mock(JasyptStandardPBEStringCryptoServiceConfiguration.class);
+            final JasyptStandardPbeStringCryptoServiceConfiguration configuration = mock(JasyptStandardPbeStringCryptoServiceConfiguration.class);
             when(configuration.algorithm()).thenReturn("PBEWITHHMACSHA512ANDAES_256");
             when(configuration.keyObtentionIterations()).thenReturn(DEFAULT_KEY_OBTENTION_ITERATIONS);
             when(configuration.securityProviderName()).thenReturn(null);
@@ -57,7 +57,7 @@
             assertThat(message).isEqualTo(MESSAGE);
         }
         { // modified
-            final JasyptStandardPBEStringCryptoServiceConfiguration configuration = mock(JasyptStandardPBEStringCryptoServiceConfiguration.class);
+            final JasyptStandardPbeStringCryptoServiceConfiguration configuration = mock(JasyptStandardPbeStringCryptoServiceConfiguration.class);
             when(configuration.algorithm()).thenReturn("PBEWITHHMACSHA512ANDAES_256");
             when(configuration.keyObtentionIterations()).thenReturn(1);
             when(configuration.securityProviderName()).thenReturn("");
@@ -81,11 +81,11 @@
         Security.addProvider(securityProvider);
         final PasswordProvider passwordProvider = mock(PasswordProvider.class);
         when(passwordProvider.getPassword()).thenReturn("+AQ?aDes!'DBMkrCi:FE6q\\sOn=Pbmn=PK8n=PK?".toCharArray());
-        final JasyptStandardPBEStringCryptoService service = new JasyptStandardPBEStringCryptoService();
+        final JasyptStandardPbeStringCryptoService service = new JasyptStandardPbeStringCryptoService();
         FieldUtils.writeDeclaredField(service, "passwordProvider", passwordProvider, true);
         FieldUtils.writeDeclaredField(service, "ivGenerator", new RandomIvGenerator(), true);
 
-        final JasyptStandardPBEStringCryptoServiceConfiguration configuration = mock(JasyptStandardPBEStringCryptoServiceConfiguration.class);
+        final JasyptStandardPbeStringCryptoServiceConfiguration configuration = mock(JasyptStandardPbeStringCryptoServiceConfiguration.class);
         when(configuration.algorithm()).thenReturn("PBEWITHSHA256AND128BITAES-CBC-BC");
         when(configuration.keyObtentionIterations()).thenReturn(DEFAULT_KEY_OBTENTION_ITERATIONS);
         when(configuration.securityProviderName()).thenReturn("BC");
@@ -101,12 +101,12 @@
         final Provider securityProvider = new BouncyCastleProvider();
         final PasswordProvider passwordProvider = mock(PasswordProvider.class);
         when(passwordProvider.getPassword()).thenReturn("+AQ?aDes!'DBMkrCi:FE6q\\sOn=Pbmn=PK8n=PK?".toCharArray());
-        final JasyptStandardPBEStringCryptoService service = new JasyptStandardPBEStringCryptoService();
+        final JasyptStandardPbeStringCryptoService service = new JasyptStandardPbeStringCryptoService();
         FieldUtils.writeDeclaredField(service, "passwordProvider", passwordProvider, true);
         FieldUtils.writeDeclaredField(service, "ivGenerator", new RandomIvGenerator(), true);
         FieldUtils.writeDeclaredField(service, "securityProvider", securityProvider, true);
 
-        final JasyptStandardPBEStringCryptoServiceConfiguration configuration = mock(JasyptStandardPBEStringCryptoServiceConfiguration.class);
+        final JasyptStandardPbeStringCryptoServiceConfiguration configuration = mock(JasyptStandardPbeStringCryptoServiceConfiguration.class);
         when(configuration.algorithm()).thenReturn("PBEWITHSHA256AND128BITAES-CBC-BC");
         when(configuration.keyObtentionIterations()).thenReturn(DEFAULT_KEY_OBTENTION_ITERATIONS);
         when(configuration.securityProviderName()).thenReturn(null);
