//MY PathParam code
package com.security.security;
import javax.websocket.server.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import org.codehaus.jettison.json.JSONException;
import com.security.security.AesUtilHelper;
import com.security.security.EncryptionUtil;;
@Path("Example")
public class encryptWithQuery {
@GET
@Produces("application/json")
@Path("/encrypt/{name}/")
public static String Encrypt(@PathParam("name") String PLAIN_TEXT){
EncryptionUtil util=new EncryptionUtil();
String encrypt = util.encode(PLAIN_TEXT);
return encrypt;
}
@GET
@Produces("application/json")
@Path("/decrypt/{name1:(.+)?}/")
public static String Decrypt(@PathParam("name1") String encrypt){
EncryptionUtil util=new EncryptionUtil();
String decrypt = util.decode(encrypt);
System.out.println(decrypt);
return decrypt;
}
}
//加密和解密//加密显示相同值,解密字节数组不能转换成字符串
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import org.apache.commons.codec.binary.Base64;
public class EncryptionUtil
{
// some random salt
private static final byte[]SALT= { (byte) 0x21, (byte) 0x21, (byte) 0xF0, (byte) 0x55, (byte) 0xC3, (byte) 0x9F, (byte) 0x5A, (byte) 0x75 };
private final static int ITERATION_COUNT = 31;
EncryptionUtil()
{
}
public static String encode(String input)
{
if (input == null)
{
throw new IllegalArgumentException();
}
try
{
KeySpec keySpec = new PBEKeySpec(null, SALT, ITERATION_COUNT);
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(SALT, ITERATION_COUNT);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
Cipher ecipher = Cipher.getInstance(key.getAlgorithm());
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] enc = ecipher.doFinal(input.getBytes());
String res = new String(Base64.encodeBase64(enc));
// escapes for url
res = res.replace('+', '-').replace('/', '_').replace("%", "%25").replace("\n", "%0A");
System.out.println("ecncoded value is " + new String(res ));
return res;
}
catch (Exception e)
{
}
return "";
}
public static String decode(String token)
{
//System.out.println(token);
if (token == null)
{
return null;
}
try
{
String input = token.replace("%0A", "\n").replace("%25", "%").replace('_', '/').replace('-', '+');
// System.out.println(input);
byte[] dec = Base64.decodeBase64(input.getBytes());
//System.out.println(dec);
KeySpec keySpec = new PBEKeySpec(null, SALT, ITERATION_COUNT);
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(SALT, ITERATION_COUNT);
//System.out.println(keySpec);
//System.out.println(paramSpec);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
//System.out.println(key);
Cipher dcipher = Cipher.getInstance(key.getAlgorithm());
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
byte[] decoded = dcipher.doFinal(dec);
System.out.println(decoded);
String result = new String(decoded);
System.out.println("Decoded value is " + new String(decoded));
return result;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
……//这里是我的encryptionutil.java
当我运行encrypt path参数时,我没有得到正确的结果,但当我运行decode path参数中的encrypt string时,显示空白屏幕。也就是说,字节数组没有转换成字符串
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import org.codehaus.jettison.json.JSONException;
import com.security.security.AesUtilHelper;
import com.security.security.EncryptionUtil;;
@Path("Example")
public class encryptWithQuery {
@GET
@Produces("application/json")
@Path("/encrypt/{name:(.+)?}/")
public static String Encrypt(@PathParam("name") String PLAIN_TEXT){
EncryptionUtil util=new EncryptionUtil();
String encrypt = util.encode(PLAIN_TEXT);
return encrypt;
}
@GET
@Produces("application/json")
@Path("/decrypt/{name1:(.+)?}/")
public static String Decrypt(@PathParam("name1") String encrypt){
EncryptionUtil util=new EncryptionUtil();
String decrypt = util.decode(encrypt);
System.out.println(decrypt);
return decrypt;
}
}
这是我第一次涉足AES加密和OpenSSL。我设法得到了一些加密和解密的例子,但它们似乎无法正常工作。例如,在加密函数中: 这将生成一个真正的“加密”文件,它还不错,但并不完全是它应该的样子(或者我认为是这样)。如果我从openssl运行cli命令来加密同一个文件,我会得到一个文本文件,其中写有加密的字符串。我的函数生成的是一个文件,不是文本(实际上它说它是未知格式)。 第二个,解密: 在这个函数
接下来,我使用java用接收到的公钥加密字符串,因此我将pkcs8公钥解析为java PublicKey对象。 并用它加密文本 它运行良好,并返回一个Base64编码的加密字符串,如下所示 未捕获的错误:解密时出错(可能是密钥不正确)。原始错误:错误:错误解码消息,从提供的标签计算出的lHash和加密数据中的lHash不匹配。(…)然而,我已经测试过,如果我只在javascript中加密和解密文本
问题内容: 我有一个奇怪的问题 我的解决方案基于将硬编码文件解密为字节[] 因此,我写了一个小的Cypher类来帮助进行加密/解密…它曾经用来模拟在某个地方进行硬编码的密钥,以及另一个在其他地方存储的预加密密钥。但这与atm无关。 加密过程如下: 检索硬编码的字节数组 用它来解密key2 使用key2解密数据 使用key1进一步解密数据 已解密数据 我将加密的数据存储为十六进制字符串,使用这两个函
问题内容: 我已经下载并编译了。 我可以加密和解密使用的相同的exe文件 它使用: 当我尝试使用ubuntu上安装的文件进行解密时,它使用: 我收到一个错误: 是什么原因造成的?谢谢 问题答案: 在Openssl 1.1中将默认摘要从MD5更改为SHA256 尝试使用 -md md5 丑陋的细节: 输入的密码不会被aes(或其他加密)按原样使用,但该命令会从中隐式派生密钥。密钥派生使用在opens
之前我是在没有加密的情况下将数据存储在数据库中。但现在我需要加密现有数据和新插入的数据。 我所做的是:对于现有数据的加密,我使用了AES_ENCRYPT()方法, 更新SET=AES_ENCRYPT('poster','mykey'); 它运行良好,我能够使用AES_DECRYPT()方法解密数据。 在代码中,我做了如下更改: $CONFIG['Encryption_Key']='MyKey';/
我想在Java文件中存储一个加密的密码。我看到了一个使用javax.crypto的解决方案,但问题是密钥是动态生成的,并且是随机的。 有没有办法告诉javax.crypto方法: 这是否可以替换为基于某个私钥生成一次的我自己的密钥? 有谁能给我指出一些如何做到这一点的资源吗?