1. import javax.crypto.Cipher;
  2. import javax.crypto.SecretKeyFactory;
  3. import javax.crypto.spec.DESKeySpec;
  4. import javax.crypto.spec.IvParameterSpec;
  5. import java.security.Key;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Base64;
  8. import java.util.Date;
  9.  
  10. public class DESUtil {
  11.  
  12. /**
  13. * 偏移变量,固定占8位字节
  14. */
  15. private final static String IV_PARAMETER = "12345678";
  16. /**
  17. * 密钥算法
  18. */
  19. private static final String ALGORITHM = "DES";
  20. /**
  21. * 加密/解密算法-工作模式-填充模式
  22. */
  23. private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
  24. /**
  25. * 默认编码
  26. */
  27. private static final String CHARSET = "utf-8";
  28.  
  29. private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  30.  
  31. /**
  32. * 生成key
  33. *
  34. * @param password
  35. * @return
  36. * @throws Exception
  37. */
  38. private static Key generateKey(String password) throws Exception {
  39. DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
  40. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
  41. return keyFactory.generateSecret(dks);
  42. }
  43.  
  44. /**
  45. * DES加密字符串
  46. *
  47. * @param password 加密密码,长度不能够小于8位
  48. * @param data 待加密字符串
  49. * @return 加密后内容
  50. */
  51. public static String encrypt(String password, String data) {
  52. if (password== null || password.length() < 8) {
  53. throw new RuntimeException("加密失败,key不能小于8位");
  54. }
  55. if (data == null)
  56. return null;
  57. try {
  58. Key secretKey = generateKey(password);
  59. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  60. IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
  61. cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
  62. byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
  63.  
  64. //JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
  65. //Android平台可以使用android.util.Base64
  66. return new String(Base64.getEncoder().encode(bytes));
  67.  
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. return data;
  71. }
  72. }
  73.  
  74. /**
  75. * DES解密字符串
  76. *
  77. * @param password 解密密码,长度不能够小于8位
  78. * @param data 待解密字符串
  79. * @return 解密后内容
  80. */
  81. public static String decrypt(String password, String data) {
  82. if (password== null || password.length() < 8) {
  83. throw new RuntimeException("加密失败,key不能小于8位");
  84. }
  85. if (data == null)
  86. return null;
  87. try {
  88. Key secretKey = generateKey(password);
  89. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  90. IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
  91. cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
  92. return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
  93. } catch (Exception e) {
  94. e.printStackTrace();
  95. return data;
  96. }
  97. }
  98.  
  99. /**
  100. * 解密
  101. * @param data
  102. * @return
  103. */
  104. public static String decryptionKey(String data){
  105. String format = sdf.format(new Date());
  106. String decrypt = decrypt(format,data);
  107. return decrypt;
  108. }
  109.  
  110. /**
  111. * 加密
  112. * @param data
  113. * @return
  114. */
  115. public static String encryptionKey(String data){
  116. String format = sdf.format(new Date());
  117. String encrypt = encrypt(format,data);
  118. return encrypt;
  119. }
  120.  
  121. public static void main(String[] args) {
  122. System.out.println(encryptionKey("100"));
  123. }
  124. }

  

89、des加密算法的更多相关文章

  1. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  2. 浅谈DES加密算法

    一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...

  3. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  4. 对称密码——DES加密算法

    前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...

  5. des加密算法java&c#

    项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...

  6. android和.net webservice中的DES加密算法

    也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...

  7. DES加密算法的C++实现

    <信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...

  8. .net中DES加密算法研究

    /// <summary> /// DES加密算法 /// </summary> /// <param name="toEncrypt">要加密 ...

  9. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

  10. DES加密算法

    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开 ...

随机推荐

  1. vue 图片分页

    <div class="activities phone"> <!-- 动态 --> <div class="activity" ...

  2. VIT论文笔记

    VIT An image is worth 16x16 words: transformers for image recognition at scale 将transformer首次应用在视觉任务 ...

  3. python读取Excel整列或整行数据

    单元格拆分 def get_index(capital): """ 大写字母(Excel列头)转数字 :param capital: 'A' --> 0, 'AA' ...

  4. notepad++ 配置Java 环境

    (1)设计新建文件的类型与编码方式: (2)安装插件NppExec (3)插件配置 (4)编辑并配置命令: 找到Advance Options; 在红中找到Java,点击 (5)运行结果查看: (6) ...

  5. 2022-05-23内部群每日三题-清辉PMP

    1.在项目执行过程中,职能经理识别到有关外包团队的新内部风险,职能经理要求项目经理提供一个不会对项目产生负面影响的快速解决方案.项目经理应该怎么做? A.制定风险分解结构(RBS) B.根据影响的严重 ...

  6. 【Python】【算法】【排序】用Python实现排序的三种算法

    class SortTest: def __init__(self): pass # 冒泡排序 def BubbleSort(self, value): if isinstance(value, li ...

  7. HTML网址集合

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. div里元素横向排列 居中对齐

      <div>             <img src="//s.weituibao.com/1582958061265/mlogo.png" alt=&quo ...

  9. toast简介

    PostgreSQL数据库不允许元组(行,记录)跨越多个页面(page)存储,所以,它不能直接存储非常大的字段值.对于大字段值,它将被压缩且(或)分解为多个物理行,该技术称为"TOAST&q ...

  10. 大数据开源平台CDH 集群(CM6.3.1 + CDH 6.3.2)的部署

    一,概述 我依照博文:https://www.cnblogs.com/liugp/p/16286645.html ,进行了CDH集群的部署.总体来说,基本比较顺利. 在部署过程中,发生了一些小问题.本 ...