侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

java怎么加密

Java  /  管理员 发布于 8年前   234

1、MD5(Message Digest Algorithm)加密算法

是一种单向加密算法,只能加密不能解密,示例

/**     * MD5简单加密     * @param content 加密内容     * @return String     */    public static String md5Encrypt(final String content) {        MessageDigest md5 = null;        try {md5 = MessageDigest.getInstance(ALGORITHM_MD5);        } catch (NoSuchAlgorithmException e) {e.printStackTrace();        }//        md5.update(text.getBytes());        //digest()最后返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符        //BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值        BigInteger digest = new BigInteger(md5.digest(content.getBytes()));        //32位        return digest.toString(16);    }

2、BASE64进行加密/解密

通常用作对二进制数据进行加密,示例

/**     * base64加密     * @param content 待加密内容     * @return byte[]     */    public static byte[] base64Encrypt(final String content) {        return Base64.getEncoder().encode(content.getBytes());    }    /**     * base64解密     * @param encoderContent 已加密内容     * @return byte[]     */    public static byte[] base64Decrypt(final byte[] encoderContent) {        return Base64.getDecoder().decode(encoderContent);    }

3、DES(Data Encryption Standard)对称加密/解密

数据加密标准算法,和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串,示例

/**     * DES加密     * @param key 秘钥key     * @param content 待加密内容     * @return byte[]     */    public static byte[] DESEncrypt(final String key, final String content) {        return processCipher(content.getBytes(), getSecretKey(key), Cipher.ENCRYPT_MODE , ALGORITHM_DES);    }    /**     * DES解密     * @param key 秘钥key     * @param encoderContent 已加密内容     * @return byte[]     */    public static byte[] DESDecrypt(final String key, final byte[] encoderContent) {        return processCipher(encoderContent, getSecretKey(key), Cipher.DECRYPT_MODE, ALGORITHM_DES);    }

4、RSA非对称加密/解密

非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。示例

/**     * RSA加密     * @param content 待加密内容     * @return byte[]     */    public static byte[] RSAEncrypt(final String content) {        return processCipher(content.getBytes(), keyPair.getPrivate(), Cipher.ENCRYPT_MODE , ALGORITHM_RSA);    }    /**     * RSA解密     * @param encoderContent 已加密内容     * @return byte[]     */    public static byte[] RSADecrypt(final byte[] encoderContent) {        return processCipher(encoderContent, keyPair.getPublic(), Cipher.DECRYPT_MODE, ALGORITHM_RSA);    }

5、SHA(Secure Hash Algorithm,安全散列算法)

数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域,示例

/**     * SHA加密     * @param content 待加密内容     * @return String     */    public static String SHAEncrypt(final String content) {        try {MessageDigest sha = MessageDigest.getInstance(ALGORITHM_SHA);byte[] sha_byte = sha.digest(content.getBytes());StringBuffer hexValue = new StringBuffer();for (byte b : sha_byte) {    //将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。    String toHexString = Integer.toHexString(b & 0xff);    hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString);}return hexValue.toString();//StringBuffer hexValue2 = new StringBuffer();//for (int i = 0; i < sha_byte.length; i++) {//    int val = ((int) sha_byte[i]) & 0xff;//    if (val < 16) {//        hexValue2.append("0");//    }//    hexValue2.append(Integer.toHexString(val));//}//return hexValue2.toString();        } catch (Exception e) {e.printStackTrace();        }       return "";    }

6、HMAC(Hash Message Authentication Code,散列消息鉴别码)

使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证,示例

/**     * HMAC加密     * @param key 给定秘钥key     * @param content 待加密内容     * @return String     */    public static byte[] HMACEncrypt(final String key, final String content) {        try {SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_MAC);Mac mac = Mac.getInstance(secretKey.getAlgorithm());//初始化macmac.init(secretKey);return mac.doFinal(content.getBytes());        } catch (Exception e) {e.printStackTrace();        }        return null;    }

测试代码:

public static void main(String[] args) {        //md5简单加密        String text = "i am text";        System.out.println(EnDecoderUtil.md5Encrypt(text));        //base64进行加密解密,通常用作对二进制数据进行加密        byte[] base64Encrypt = EnDecoderUtil.base64Encrypt("123456789");        String toHexString = HexUtils.toHexString(base64Encrypt);        System.out.println(toHexString);        byte[] base64Decrypt = EnDecoderUtil.base64Decrypt(base64Encrypt);        System.out.println(new String(base64Decrypt));        //DES对称加密/解密        //要求key至少长度为8个字符        String key = "123456789";        //加密        byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, "Hello, DES");        System.out.println(Base64.getEncoder().encodeToString(encode_bytes));        //解密        byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes);        System.out.println(new String(decode_bytes));        //RSA        //数据使用私钥加密        byte[] en_byte = EnDecoderUtil.RSAEncrypt("Hi, RSA");        System.out.println(Base64.getEncoder().encodeToString(en_byte));        //用户使用公钥解密        byte[] de_byte = EnDecoderUtil.RSADecrypt(en_byte);        System.out.println(new String(de_byte));        //服务器根据私钥和加密数据生成数字签名        byte[] sign_byte = EnDecoderUtil.getSignature(en_byte);        System.out.println(Base64.getEncoder().encodeToString(sign_byte));        //用户根据公钥、加密数据验证数据是否被修改过        boolean verify_result = EnDecoderUtil.verifySignature(en_byte, sign_byte);        System.out.println(verify_result);        //SHA        String sha = EnDecoderUtil.SHAEncrypt("Hi, RSA");        System.out.println(sha);        //HMAC        byte[] mac_bytes = EnDecoderUtil.HMACEncrypt(key, "Hi, HMAC");        System.out.println(HexUtils.toHexString(mac_bytes));    }

更多java知识请关注java基础教程栏目。

以上就是java怎么加密的详细内容,更多请关注其它相关文章!


  • 上一条:
    java中如何实现接口
    下一条:
    java读取文件是否存在的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客