资讯专栏INFORMATION COLUMN

PHP mcrypt_encrypt加密,使用java解密

Corwien / 3159人阅读

摘要:使用给定的和加密的数据,没有使用函数填充的情况下,如果数据长度不是分组大小,则在其后使用补齐。

PHP mcrypt_encrypt使用给定的 cipher 和 mode 加密的数据,没有使用pkcs5_pad()函数填充的情况下,如果数据长度不是n*分组大小,则在其后使用“0”补齐。

Java 不能使用AES/ECB/PKCS5Padding,因为填充方式与php不同,不能正常的解密

在java中应该使用AES/ECB/NoPadding方式,手动使用"0",填充补齐

一、PHP加密解密类示例:


二、 JAVA加密解密类示例:

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.*;

public class Security {

    public static String encrypt(String input, String key) {

        byte[] crypted = null;

        try {

            input = StringUtils.rightPad(input, 16, "");

            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");

            cipher.init(Cipher.ENCRYPT_MODE, skey);
            crypted = cipher.doFinal(input.getBytes());

        } catch (Exception e) {

            System.out.println(e.toString());

        }

        return new String(Base64.encodeBase64(crypted));

    }

    public static String decrypt(String input, String key) {

        byte[] output = null;

        try {

            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");

            cipher.init(Cipher.DECRYPT_MODE, skey);

            output = cipher.doFinal(Base64.decodeBase64(input));

        } catch (Exception e) {

            System.out.println(e.toString());

        }

        return new String(output);

    }

    public static void main(String[] args) {

        String key = "";

        String data = "412016278912497";

        System.out.println(Security.encrypt(data, key));

        System.out.println(Security.decrypt(Security.encrypt(data, key), key));

    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69037.html

相关文章

  • PHP mcrypt_encrypt加密使用java解密

    摘要:使用给定的和加密的数据,没有使用函数填充的情况下,如果数据长度不是分组大小,则在其后使用补齐。 PHP mcrypt_encrypt使用给定的 cipher 和 mode 加密的数据,没有使用pkcs5_pad()函数填充的情况下,如果数据长度不是n*分组大小,则在其后使用0补齐。 Java 不能使用AES/ECB/PKCS5Padding,因为填充方式与php不同,不能正常的解密 在...

    BearyChat 评论0 收藏0
  • php使用openssl_encrypt代替mcrypt_encrypt实现js加密php解密的方

    摘要:项目背景因为自己开发的接口希望在传递的工程中可以保证参数是密文的形式,主要是前端使用加密,后端使用解密在网络上搜索了很多的方法,但是大部分的都是使用和进行端的加解密,但是众所周知的问题,这两个方法在以后将会被废弃,故而采用。 项目背景 因为自己开发的接口希望在传递的工程中可以保证参数是密文的形式,主要是前端使用js加密,后端使用php解密 在网络上搜索了很多的方法,但是大部分的都是使...

    wuyumin 评论0 收藏0
  • php使用openssl_encrypt代替mcrypt_encrypt实现js加密php解密的方

    摘要:项目背景因为自己开发的接口希望在传递的工程中可以保证参数是密文的形式,主要是前端使用加密,后端使用解密在网络上搜索了很多的方法,但是大部分的都是使用和进行端的加解密,但是众所周知的问题,这两个方法在以后将会被废弃,故而采用。 项目背景 因为自己开发的接口希望在传递的工程中可以保证参数是密文的形式,主要是前端使用js加密,后端使用php解密 在网络上搜索了很多的方法,但是大部分的都是使...

    FullStackDeveloper 评论0 收藏0
  • PHP7.1废弃加密方法替换方案

    摘要:废弃加密方法替换方案前瞻最近,我负责在重构项目的支付渠道,因为之前都是接一个渠道在的方式,代码显的比较混乱,恰巧整体项目在微服务化,所以我们决定将支付做成一个微服务,独立出来。 PHP7.1废弃加密方法替换方案 前瞻 最近,我负责在重构项目的支付渠道,因为之前都是接一个渠道在ifelse的方式,代码显的比较混乱,恰巧整体项目在微服务化,所以我们决定将支付做成一个微服务,独立出来。当前比...

    afishhhhh 评论0 收藏0
  • php如何openssl_encrypt加密解密

    摘要:密钥长度是位,超过位数密钥被忽略。跨语言做加密解密经常会出现问题,往往是填充方式不对编码不一致或者加密解密模式没有对应上造成。是为了兼容用加密的结果。 最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了百度和谷歌两个老师后,结合了多篇文档内容后,终于实现了。 一、DES介绍 DES 是对称性加密里面常见一种,全称为 Data Enc...

    JouyPub 评论0 收藏0

发表评论

0条评论

Corwien

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<