当前位置: 首页 > 知识库问答 >
问题:

加密和解密在我的泽西项目中不能正常工作

程成天
2023-03-14
//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时,显示空白屏幕。也就是说,字节数组没有转换成字符串

共有1个答案

司徒翼
2023-03-14
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方法: 这是否可以替换为基于某个私钥生成一次的我自己的密钥? 有谁能给我指出一些如何做到这一点的资源吗?