Android AES加密后无法解密 求大神指导 50C
    package com.example.aes;
    import java.io.UnsupportedEncodingException;
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    /**
    * AES加密解密算法
    */
    public class AESHelper {
    /** 算法/模式/填充 **/
    private static final String CipherMode = "AES/CBC/PKCS5Padding";
    /** 创建密钥 **/
    private static SecretKeySpec createKey(String key) {
    byte[] data = null;
    if (key == null) {
    key = "";
    }
    StringBuffer sb = new StringBuffer(16);
    sb.append(key);
    while (sb.length() < 16) {
    sb.append("0");
    }
    if (sb.length() > 16) {
    sb.setLength(16);
    }
    try {
    data = sb.toString().getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return new SecretKeySpec(data, "AES");
    }
    private static IvParameterSpec createIV(String password) {
    byte[] data = null;
    if (password == null) {
    password = "";
    }
    StringBuffer sb = new StringBuffer(16);
    sb.append(password);
    while (sb.length() < 16) {
    sb.append("0");
    }
    if (sb.length() > 16) {
    sb.setLength(16);
    }
    try {
    data = sb.toString().getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return new IvParameterSpec(data);
    }
    /** 加密字节数据 **/
    public static byte[] encrypt(byte[] content, String password, String iv) {
    try {
    SecretKeySpec key = createKey(password);
    Cipher cipher = Cipher.getInstance(CipherMode);
    cipher.init(Cipher.ENCRYPT_MODE, key, createIV(iv));
    byte[] result = cipher.doFinal(content);
    return result;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }
    /** 加密(结果为16进制字符串) **/
    public static String encrypt(String content, String password, String iv) {
    byte[] data = null;
    try {
    data = content.getBytes("UTF-8");
    } catch (Exception e) {
    e.printStackTrace();
    }
    data = encrypt(data, password, iv);
    String result = byte2hex(data);
    return result;
    }
    /** 解密字节数组 **/
    public static byte[] decrypt(byte[] content, String password, String iv) {
    try {
    SecretKeySpec key = createKey(password);
    Cipher cipher = Cipher.getInstance(CipherMode);
    cipher.init(Cipher.DECRYPT_MODE, key, createIV(iv));
    byte[] result = cipher.doFinal(content);
    return result;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }
    /** 解密(输出结果为字符串) **/
    public static String decrypt(String content, String password, String iv) {
    byte[] data = null;
    try {
    data = hex2byte(content);
    } catch (Exception e) {
    e.printStackTrace();
    }
    data = decrypt(data, password, iv);
    if (data == null)
    return null;
    String result = null;
    try {
    result = new String(data, "UTF-8");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return result;
    }
    /** 字节数组转成16进制字符串 **/
    public static String byte2hex(byte[] b) { // 一个字节的数,
    StringBuffer sb = new StringBuffer(b.length * 2);
    String tmp = "";
    for (int n = 0; n < b.length; n++) {
    // 整数转成十六进制表示
    tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
    if (tmp.length() == 1) {
    sb.append("0");
    }
    sb.append(tmp);
    }
    return sb.toString().toUpperCase(); // 转成大写
    }
    /** 将hex字符串转换成字节数组 **/
    private static byte[] hex2byte(String inputString) {
    if (inputString == null || inputString.length() < 2) {
    return new byte[0];
    }
    inputString = inputString.toLowerCase();
    int l = inputString.length() / 2;
    byte[] result = new byte[l];
    for (int i = 0; i < l; ++i) {
    String tmp = inputString.substring(2 * i, 2 * i + 2);
    result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
    }
    return result;
    }
    }



            ------------------------------------------------------------
    public class MainActivity extends Activity implements OnClickListener {
    private Button mJiami, mJiemi;
    private EditText mName;
    private String KEY="fe8f95cb0f968676572ab9f46d8a261b";
    private String IV ="0F968676572AB9F4";
    private String name;
    String aes;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    initView();
    }
    private void initView() {
    mName = (EditText) findViewById(R.id.editText1);
    name = mName.getText().toString().trim();
    mJiami = (Button) findViewById(R.id.button1);
    mJiemi = (Button) findViewById(R.id.button2);
    mJiami.setOnClickListener(this);
    mJiemi.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
    String help = null;
    switch (v.getId()) {

    case R.id.button1:
    try {
    aes = AESHelper.encrypt(name, KEY, IV);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Toast.makeText(this, "加密后值为:"+aes, 0).show();

    break;
    case R.id.button2:
    try {
    help = AESHelper.decrypt(aes, KEY, IV);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    if(help.length()==0){
    Toast.makeText(this, "解密失败!", 0).show();
    }else{
    Toast.makeText(this, help, 0).show();
    }
    break;
    default:
    break;
    }
    }
    }

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java AES-256加密文件之后解密文件,文件被损坏

public static Cipher initAESCipher(String password, int cipherMode) { // 创建Key gen KeyGenerator keyGenerator = null; Cipher cipher = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom(password.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] codeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(codeFormat, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC"); // 初始化 cipher.init(cipherMode, key); return cipher; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchPaddingException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (InvalidKeyException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` ``` public static void encrypt(File source, File target, String password) throws Exception { InputStream input = new FileInputStream(source); OutputStream ouput = new FileOutputStream(target); logger.debug("开始写入加密文件"); long start = System.currentTimeMillis(); CipherInputStream cipherInputStream = (CipherInputStream) encrypt(input, password); IOUtils.copy(cipherInputStream,ouput ); cipherInputStream.close(); input.close(); ouput.close(); logger.debug("完成文件加密,耗时:" + (System.currentTimeMillis() - start)); } ``` ``` public static InputStream encrypt(InputStream input, String password) { logger.debug("开始加密文件流"); long start = System.currentTimeMillis(); Cipher cipher = initAESCipher(password, Cipher.ENCRYPT_MODE); logger.debug("生成密钥耗时:" + (System.currentTimeMillis() - start)); Assert.notNull(cipher); // 以加密流写入文件 CipherInputStream cipherInputStream = new CipherInputStream(input, cipher); logger.debug("完成加密文件流,耗时:" + (System.currentTimeMillis() - start)); return cipherInputStream; } ``` ``` 目前发现加密DOCX,PPTX,ZIP等压缩类文件之后进行解密会产生头信息被损坏的现象,望各位大神提供下解决思路。

aes解密后明文为乱码的问题

自己尝试使用aes的cbc模式加密字符串,并解密字符串,并在最后使用OpenSSl自带的获取错误消息函数,获取错误信息,显示在加密和解密的过程中没有报错,但是将最后的明文结果输出,得到的始终是乱码啊。下面为自己写的代码,请各位大神看看啊 1. 1. #define SIZE 1000 1. #define BITS 128 1. using namespace std; 1. int main() 1. { 1. char in[50]; 1. cin.get(in, 50); 1. AES_KEY* Enkey = new(std::nothrow) AES_KEY; 1. AES_KEY* Dekey = new(std::nothrow) AES_KEY; 1. if (Dekey == nullptr || Enkey == nullptr) 1. { 1. return 0; 1. } 1. char userkey[16]="123456789012345"; 1. for (int i=0;i<16;++i) 1. { 1. userkey[i] = 32 + i; 1. } 1. AES_set_encrypt_key((const unsigned char*)userkey, BITS, Enkey); 1. AES_set_decrypt_key((const unsigned char*)userkey, BITS, Dekey); 1. 1. unsigned char* szOutEn; 1. unsigned char* szOutDe; 1. unsigned char szIvec[16]; 1. int len; 1. len = 0; 1. if ((strlen(in)+1)%16 == 0) 1. { 1. len = strlen(in) + 1; 1. } 1. else 1. { 1. len = (strlen(in) / 16 + 1) * 16; 1. } 1. szOutEn = new(std::nothrow) unsigned char[len]; 1. szOutDe = new(std::nothrow) unsigned char[len]; 1. if (nullptr == szOutEn || nullptr == szOutDe) 1. { 1. return 0; 1. } 1. 1. AES_cbc_encrypt((const unsigned char*)in, szOutEn, len, Enkey, szIvec, AES_ENCRYPT); 1. cout << "加密后的密文为:" << szOutEn << endl; 1. AES_cbc_encrypt((const unsigned char*)szOutEn, szOutDe, len, Dekey, szIvec, AES_DECRYPT); 1. 1. unsigned long ulErr = ERR_get_error(); 1. char szErrMsg[1024] = { 0 }; 1. char* pszTmp = nullptr; 1. pszTmp = ERR_error_string(ulErr, szErrMsg); 1. cout << "解密后的密文为:" << szOutDe << endl; 1. cout << szOutEn << endl; 1. cout << "错误码:" << ulErr<<endl; 1. cout << szErrMsg << endl; 1. /*AES_encrypt_BaseEncond((const unsigned char*)in, Enkey); 1. AES_decrypt_BaseDecode("Encode.txt", Dekey);*/ 1. delete Enkey; 1. delete Dekey; 1. cin.get(); 1. return 0; 1. }

AES加密后,登录提示密码长度错误,请大神帮帮忙,谢谢!

1.先用md5加密: ``` public static String getMd5(String s) { char hexChar[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8' , '9', 'a', 'b', 'c', 'd', 'e', 'f','A', 'B', 'C', 'D', 'E', 'F'}; //md5加密算法的加密对象为字符数组,这里是为了得到加密的对象 byte[] b = s.getBytes(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(b); byte[] b2 = md.digest();// 进行加密并返回字符数组 char str[] = new char[b2.length << 1]; int len = 0; //将字符数组转换成十六进制串,形成最终的密文 for (int i = 0; i < b2.length; i++) { byte val = b2[i]; str[len++] = hexChar[(val >>> 4) & 0xf]; str[len++] = hexChar[val & 0xf]; } return new String(str); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` 2.再用AES加密, ``` /** * AES 加密 * 密钥是apiSecret 的前16位 * 向量是apiSecret 的后16位 * @param password * @param apiSecret * @return * @throws Exception */ public static String getAesEncrypt(String password,String apiSecret)throws Exception{ String key = apiSecret.substring(0,16); String iv = apiSecret.substring(16); String md5Pass = getMd5(password); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes("UTF-8")); //System.out.println("密码的长度为:"+keyspec.getEncoded().length); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(md5Pass.getBytes("UTF-8")); return bytesToHexString(encrypted); } public static String bytesToHexString(byte[] bs) { StringBuffer sb = new StringBuffer(); String hex = ""; for (int i = 0; i < bs.length; i++) { hex = Integer.toHexString(bs[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex); } System.out.println("结果为:"+sb); return sb.toString(); } ``` 结果就提示:登录失败;加密后的密码长度错误 ![图片说明](https://img-ask.csdn.net/upload/201904/23/1556001375_850501.jpg)

C++ openssl aes加密失败

我在使用openssl的aes(cbc)加密字节超过96的字符串后,在解密就会少字符,下面是我写的代码,求大神指点下什么问题,AES一次加密的明文是有长度限制么? CooloiAES::CooloiAES() : MSG_LEN(0) { for(int i = 0; i < AES_BLOCK_SIZE; i++) { key[i] = 32 + i; } } CooloiAES::~CooloiAES() { } std::string CooloiAES::aes_encrypt(std::string msg) { int i = msg.size() / 16; MSG_LEN = ( i + 1 ) * 16; //MSG_LEN = msg.size() + 16; char in[MSG_LEN]; char out[MSG_LEN]; memset((char*)in,0,MSG_LEN); memset((char*)out,0,MSG_LEN); //strncpy((char*)in,msg.c_str(),msg.size()); //memcpy((char*)in,msg.data(),msg.size()); strcpy((char*)in,msg.c_str()); unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量 for(int j = 0; j < AES_BLOCK_SIZE; ++j) { iv[j] = 0; } AES_KEY aes; if(AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0) { return NULL; } size_t len = strlen(in); std::cout << "LEN ::::: " << len << std::endl; AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_ENCRYPT); std::string encrypt_msg(&out[0],&out[MSG_LEN+16]); for(int i= 0;out[i];i++){ printf("%x",(unsigned char)out[i]); //std::cout << dstStringTemp[i]; } std::cout << std::endl; return encrypt_msg; } std::string CooloiAES::aes_decrypt(std::string msg) { MSG_LEN = msg.size(); char in[MSG_LEN]; char out[MSG_LEN+16]; memset((char*)in,0,MSG_LEN); memset((char*)out,0,MSG_LEN+16); //strncpy((char*)in,msg.c_str(),msg.size()); memcpy((char*)in,msg.data(),msg.size()); for(int i= 0;in[i];i++){ printf("%x",(unsigned char)in[i]); //std::cout << dstStringTemp[i]; } std::cout << std::endl; unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量 for(int j = 0; j < AES_BLOCK_SIZE; ++j) { iv[j] = 0; } AES_KEY aes; if(AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0) { return NULL; } //int len = msg.size(); size_t len = strlen(in); AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_DECRYPT); std::string decrypt_msg = out; return decrypt_msg; } ``` ```

C#加密 android解密 android没法解密

请问各位大神,刚接触加密解密现遇到一个问题,需要用C#加密然后传给android端解密,我现在用的是AES加密,密钥是根据双方约定的字符串,例如用户名这种,但每次C#加密后在android端都没法解密,我查了一下应该密钥的原因,想问问有木有其他办法来解决这个问题,谢谢!

c++ 调用openssl库AES_cbc_encrypt加解密padding解密如何去除

与服务器http通信。加密:AES_set_encrypt_key(AesKey, 128, &aes); AES_cbc_encrypt(input_string, encrypt_string, len, &aes, AesIvp, AES_ENCRYPT); 过去的字段后面添加的padding补全没问题。服务器返回的密文解密: AES_set_decrypt_key(AesKey, 128, &aes); AES_cbc_encrypt((unsigned char*)Dncrypt_string, (unsigned char*)encrypt_string, nlen, &aes, AesIvp, AES_DECRYPT); 解密出来的后面会多出padding乱码。请问哪位大神知道如何安全的去除解密后的padding。

在c++里怎么用aes(openssl)实现通信加密?

我之前写了一个程序,就是在c++里使用aes(openssl)加密消息后,再通过socket传送,加密后的二进制数据,我就直接存到了字符串里发送了出去,然后到了另一端就解密失败了,报错是539,有趣的是,我把这个消息再原封不动的转发回进行加密的那个程序中后,就可以解密了。因为以前也没有写过加解密的程序,所以也不知道是不是哪个地方的想法有问题,求大神指点迷津啊!!!!

新人求帮啊!C++怎样完成基于AES加密算法的音视频播放器的实现

要求能满足边解密边播放边清空缓存的条件!不知到有大神能做的吗? C币神马的不是问题,可以的加Q细聊 qq:714491360

C#AES加密时,怎么产生密钥和密钥向量?

各位大神好,最近在做一个一个项目,牵扯到加密,网上搜到了加密算法,但是不知道AES的机密密钥和密钥向量怎么产生?烦请各位为小弟指点一下~

请问超过1M壁以上的AES加密数据,用什么软件能够快速解密?

要解密AES/ECB/PKCS5Padding加密的数据,但数据比较大,有一些网站的解密工具会卡死,请各位大神能不能推荐AES解密的软件,能够快速解密数据。

php AES加密用js怎么写,有大神帮忙看一下吗,一点都不会

/** * 加密 * @param String input 加密的字符串 * @param String key 解密的key * @return HexString */ public function encrypt($input = '') { $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $input = $this->pkcs5_pad($input, $size); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $this->key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data); return $data; } /** * 填充方式 pkcs5 * @param String text 原始字符串 * @param String blocksize 加密长度 * @return String */ private function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } /** * 解密 * @param String input 解密的字符串 * @param String key 解密的key * @return String */ public function decrypt($sStr) { $decrypted= mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($sStr), MCRYPT_MODE_ECB); $dec_s = strlen($decrypted); $padding = ord($decrypted[$dec_s-1]); $decrypted = substr($decrypted, 0, -$padding); return $decrypted; } ``` ```

如何用C++实现JSEncrypt中的加密

JS中有个JSEncrypt的setPublicKey(key)函数直接加密,我想通过C++实现,虽然看到了源码,字面意思都认识,但是表示还是看不懂。 求大神指教,如何实现C++的加密。这是JSEncrypt的源码http://www.4366.com/s/sdk/jsencrypt.js 用chrome打开结构比较清晰,用360打开就比较乱了。

spring 在读取加密后的xml配置文件的时候,怎么spring先解密再读取

小弟新手求各位大神帮帮忙=======================

java 3DES 解密时部分乱码

3DES 解密时,出现部分乱码,byte数组里有负值,不知道如何解决 ,求大神指导,代码如下: ``` import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; /*字符串 DESede(3DES) 加密 * ECB模式/使用PKCS7方式填充不足位,目前给的密钥是192位 * 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的 * 加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加 * 密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的 * 密钥,P代表明文,C代表密表,这样, * 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) * 3DES解密过程为:P=Dk1((EK2(Dk3(C))) * */ public class url { private static final String Algorithm = "DESede/CBC/NoPadding"; //定义加密算法,可用 DES,DESede,Blowfish private static final String key="CCBJF2014cowell20151118Y"; private static final String vi = "KW2015rj"; //keybyte为加密密钥,长度为24字节 //src为加密后的缓冲区 public static String decryptMode(String strMi){ try { //szSrc.getBytes("UTF-8"); byte[] src = com.sun.org.apache.xml.internal.security.utils.Base64.decode(strMi); //src = it.sauronsoftware.base64.Base64.encode(src); DESedeKeySpec dks = new DESedeKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); SecretKey securekey = keyFactory.generateSecret(dks); IvParameterSpec iv = new IvParameterSpec(vi.getBytes()); Cipher cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.DECRYPT_MODE, securekey,iv ); byte[] encoded = cipher.doFinal(src);//在单一方面的加密或解密 //Base64.encode(encoded); return new String(encoded); } catch (java.security.NoSuchAlgorithmException e1) { // TODO: handle exception e1.printStackTrace(); }catch(javax.crypto.NoSuchPaddingException e2){ e2.printStackTrace(); }catch(java.lang.Exception e3){ e3.printStackTrace(); } return null; } public static void main(String[] args) throws UnsupportedEncodingException { // TODO Auto-generated method stub //添加新安全算法,如果用JCE就要把它添加进去 String szSrc = "G6ZT+GxPq7JkGuLjVQ4TUAUyTcp+UnNpsoKGzy5FudtRNn6v9tSyWmxpcnFu01Rk8Th0NoV0E8TIhffliYQ4xQicG8ciVYWP2s+jk192tJrF6x6WV0ej2w=="; szSrc.getBytes("UTF-8"); System.out.println("jie密前的字符串:" + szSrc); System.out.println("jie密后的字符串:" + decryptMode(szSrc)); //byte[] srcBytes = decryptMode(keyBytes,encoded); //System.out.println("解密后的字符串:" + (new String(srcBytes))); } } ```

C++文件流二进制加解密问题

最近在编一个加密程序,想通过fstream来对文件进行操作。想用文件流实现在文件中的二进制模二加,求助大神们。 fstream finout; finout.open(filename,ios_base::binary);接下来就不知道怎么做了,不想用fwrite

RSA解密 Decryption error 问题,很迷惑

使用RSA+AES混合加密传输数据的时候,这是request请求时对入参的处理: ``` @Override public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException { try { RsaType type = RsaType.NONE; if (methodParameter.getMethod().isAnnotationPresent(RsaSecurityParameter.class)) { //获取注解配置的包含和去除字段 RsaSecurityParameter serializedField = methodParameter.getMethodAnnotation(RsaSecurityParameter.class); //入参是否需要解密 type =serializedField.type(); } if (type.equals(RsaType.ALL) || type.equals(RsaType.ONLY_DECODE)) { String aesKey = ""; HttpHeaders headers = inputMessage.getHeaders(); if(headers.containsKey("Aes-Key")){ List<String> aesKeys = headers.get("Aes-Key"); if(aesKeys.size() == 1){ aesKey = aesKeys.get(0); } } if(StringUtils.isEmpty(aesKey)){ throw new Exception(); } String encrptAesKey = RSAUtils.decryptDataOnJava(aesKey,PRIVATE_KEY); //需要解密 return new MyHttpInputMessage(inputMessage,encrptAesKey); }else{ return inputMessage; } } catch (Exception e) { e.printStackTrace(); return inputMessage; } } ``` 这是响应时的处理: ``` public T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { try { RsaType type = RsaType.NONE; if (returnType.getMethod().isAnnotationPresent(RsaSecurityParameter.class)) { //获取注解配置的包含和去除字段 RsaSecurityParameter serializedField = returnType.getMethodAnnotation(RsaSecurityParameter.class); //出参是否需要加密 type =serializedField.type(); } if (type.equals(RsaType.ALL) || type.equals(RsaType.ONLY_ENCODE)) { //需要加密 String aesKey = ""; HttpHeaders headers = request.getHeaders(); if(headers.containsKey("Aes-Key")){ List<String> aesKeys = headers.get("Aes-Key"); if(aesKeys.size() == 1){ aesKey = aesKeys.get(0); } } if(StringUtils.isEmpty(aesKey)){ throw new Exception(); } String encrptAesKey = RSAUtils.decryptDataOnJava(aesKey,PRIVATE_KEY); //使用aesKey加密响应数据 return (T) AESUtils.aesEncrypt(JSON.toJSONString(body), encrptAesKey); }else{ return body; } } catch (Exception e) { e.printStackTrace(); return body; } } ``` 这两块代码,关于从请求头取出用RSA加密处理后的Aes-Key是一致的。DEBUG打断点观察取到的数据也是一致的,但是在使用RSA解密时,入参的解密是正常没问题的。出参这一块的解密就报javax.crypto.BadPaddingException: Decryption error这个错误。 这是入参时候的处理,这边aes-key是正常解密出来了的。 ![图片说明](https://img-ask.csdn.net/upload/201910/23/1571826872_2395.png) 这是出参时候的处理,这边aes-key解密就报错了。 ![图片说明](https://img-ask.csdn.net/upload/201910/23/1571827079_319247.png) 包括我在本地调用测试方法也是正常解密的不会报错的。 有没有大神帮忙解释一下?

用java对des解密,知道密钥和密文的了

已经知道密文为D6E54EE0CCD748C4E05C38197A020E02B1F206BB8BA8C6EA 密钥为:DF323TGR 想问下怎么弄它的明文 还有就是密钥为DF323TGR和DF323TGR34YR后者是可以的吗? 求大神解答下

Python出错问题,有没有大神给说说

from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class prpcrypt(): def __init__(self, key): self.key = key self.mode = AES.MODE_CBC # 加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数 def encrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key) text = text.encode("utf-8") # 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用 length = 16 count = len(text) add = length - (count % length) text = text + (b'\0' * add) self.ciphertext = cryptor.encrypt(text) # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题 # 所以这里统一把加密后的字符串转化为16进制字符串 return b2a_hex(self.ciphertext).decode("ASCII") # 解密后,去掉补足的空格用strip() 去掉 def decrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key) plain_text = cryptor.decrypt(a2b_hex(text)) return plain_text.rstrip(b'\0').decode("utf-8") if __name__ == '__main__': pc = prpcrypt('keyskeyskeyskeys') # 初始化密钥 e = pc.encrypt("my book is free") d = pc.decrypt(e) print(e, d) e = pc.encrypt("我是一个粉刷匠") d = pc.decrypt(e) print(e, d) 这是源代码, Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/untitled9/test2.py", line 37, in <module> e = pc.encrypt("my book is free") File "C:/Users/Administrator/PycharmProjects/untitled9/test2.py", line 15, in encrypt cryptor = AES.new(self.key, self.mode, self.key) File "C:\Python34\lib\site-packages\Crypto\Cipher\AES.py", line 200, in new return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs) File "C:\Python34\lib\site-packages\Crypto\Cipher\__init__.py", line 55, in _create_cipher return modes[mode](factory, **kwargs) File "C:\Python34\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 234, in _create_cbc_cipher cipher_state = factory._create_base_cipher(kwargs) File "C:\Python34\lib\site-packages\Crypto\Cipher\AES.py", line 100, in _create_base_cipher result = start_operation(c_uint8_ptr(key), File "C:\Python34\lib\site-packages\Crypto\Util\_raw_api.py", line 151, in c_uint8_ptr raise TypeError("Object type %s cannot be passed to C code" % type(data)) TypeError: Object type <class 'str'> cannot be passed to C code 这是输出的错误信息,我用的Python34,请大神看看是什么错误 ,谢谢

麻烦大神把这段改写成java,两者能互通,在线等~

<?php /** * 利用mcrypt做AES加密解密 */ abstract class AES{ /** * 算法,另外还有192和256两种长度 */ const CIPHER = MCRYPT_RIJNDAEL_128; /** * 模式 */ const MODE = MCRYPT_MODE_ECB; /** * 加密 * @param string $key 密钥 * @param string $str 需加密的字符串 * @return type */ static public function encode( $key, $str ){ $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND); return mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv); } /** * 解密 * @param type $key * @param type $str * @return type */ static public function decode( $key, $str ){ $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND); return mcrypt_decrypt(self::CIPHER, $key, $str, self::MODE, $iv); } } ?> 自己写了个java的,但是加密出来,前面一段相同,后面一段不同 public static String encrypt(String input, String key) throws Exception { byte[] crypted = null; try { SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skey); crypted = cipher.doFinal(input.getBytes()); } catch (Exception e) { System.out.println(e.toString()); } return new String(byte2hex(crypted)); }

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

网上很多的文章和帖子中在介绍秒杀系统时,说是在下单时使用异步削峰来进行一些限流操作,那都是在扯淡! 因为下单操作在整个秒杀系统的流程中属于比较靠后的操作了,限流操作一定要前置处理,在秒杀业务后面的流程中做限流操作是没啥卵用的。

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

Intellij IDEA 美化指南

经常有人问我,你的 IDEA 配色哪里搞的,我会告诉他我自己改的。作为生产力工具,不但要顺手而且更要顺眼。这样才能快乐编码,甚至降低 BUG 率。上次分享了一些 IDEA 有用的插件,反...

【相亲】96年程序员小哥第一次相亲,还没开始就结束了

颜值有点高,条件有点好

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后一个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我一直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问