Goal
A servlet to return encrypt/decrypt words
Package Install
Encryption Request: http://localhost:4502/bin/experienceaem/encrypt?words=experience,aem
Decryption Request: http://localhost:4502/bin/experienceaem/decrypt?words={10d97d9138c4bc55f321b1120c44ff1b0aa33f1f39aac42b9d487d06e581dd83},{cd1449b90a6277816a638f45665f604f1d32a56ceadfd1dde56f9254812d28e8}
Solution
Create and deploy EncryptDecryptServlet with following code
package apps.experienceaem;
import com.adobe.granite.crypto.CryptoSupport;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.*;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletException;
import java.io.IOException;
@Component(label = "Experience AEM Encryption Decryption Servlet")
@Service
@Properties({
@Property(name = "sling.servlet.methods", value = { "GET" }, propertyPrivate = true),
@Property(name = "sling.servlet.paths", value = {
"/bin/experienceaem/encrypt",
"/bin/experienceaem/decrypt"
})
})
public class EncryptDecryptServlet extends SlingAllMethodsServlet {
private static final Logger LOG = LoggerFactory.getLogger(EncryptDecryptServlet.class);
@Reference
protected CryptoSupport cryptoSupport;
@Override
protected void doGet(final SlingHttpServletRequest request, final SlingHttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
String words = request.getParameter("words");
String uri = request.getRequestURI();
if(StringUtils.isEmpty(words)){
throw new ServletException("Need words");
}
String[] wordsArr = words.split(",");
try{
JSONWriter jw = new JSONWriter(response.getWriter());
jw.object();
for(String word : wordsArr){
jw.key(word).value(uri.endsWith("encrypt") ? cryptoSupport.protect(word)
: cryptoSupport.unprotect(word));
}
jw.endObject();
}catch(Exception e){
LOG.error("Error encrypting/decrypting", e);
}
}
}


This is not working properly for me. I receive:
ReplyDeleteCaused by: com.adobe.granite.crypto.CryptoException: Failed decrypting cipher text
at com.adobe.granite.crypto.internal.CryptoSupportImpl.decrypt(CryptoSupportImpl.java:96)
at com.adobe.granite.crypto.internal.CryptoSupportImpl.unprotect(CryptoSupportImpl.java:157)
... 110 common frames omitted
Caused by: com.rsa.jsafe.JSAFE_PaddingException: Invalid padding.
at com.rsa.jsafe.JSAFE_SymmetricCipher.decryptFinal(Unknown Source)
at com.adobe.granite.crypto.internal.jsafe.JSafeCryptoSupport.getPlainText(JSafeCryptoSupport.java:325)
at com.adobe.granite.crypto.internal.jsafe.JSafeCryptoSupport.getPlainText(JSafeCryptoSupport.java:307)
at com.adobe.granite.crypto.internal.CryptoSupportImpl.decrypt(CryptoSupportImpl.java:94)
... 111 common frames omitted
This is a very informative and well-written article that provides useful insights in a clear and engaging way. I appreciate how the information is explained simply, making it easy for readers to understand and learn something valuable. The content is helpful for students exploring research methods, academic writing, and dissertation writing services. Overall, a valuable and engaging post that offers meaningful information in a simple and professional manner.
ReplyDeleteThis is a very informative and well-written article that provides useful insights in a clear and engaging way. I appreciate how the topic is explained simply, making it easy for readers to understand and gain valuable knowledge. The content can be helpful for students exploring bookkeeping, financial management, and xero assignment help. Overall, a valuable and engaging post that offers meaningful information in a simple and professional manner.
ReplyDelete