当前位置: 首页 > news >正文

无锡网站建设选众鼎问答类咨询网站的建设

无锡网站建设选众鼎,问答类咨询网站的建设,wordpress蜘蛛记录,珠海品牌网站建设DES算法提供CBC, OFB, CFB, ECB四种模式#xff0c;MAC是基于ECB实现的。一、数据补位DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文#xff0c;最后一段不足8个字节#xff0c;按照需求补足8个字节(通常补00或者FF#xff0c;根…DES算法提供CBC, OFB, CFB, ECB四种模式MAC是基于ECB实现的。一、数据补位DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文最后一段不足8个字节按照需求补足8个字节(通常补00或者FF根据实际要求不同)进行计算之后按照顺序将计算所得的数据连在一起即可。这里有个问题就是为什么要进行数据补位主要原因是DES算法加解密时要求数据必须为8个字节。二、ECB模式DES ECB(电子密本方式)其实非常简单就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文最后一段不足8个字节按照需求补足8个字节进行计算之后按照顺序将计算所得的数据连在一起即可各段数据之间互不影响。三、CBC模式DES CBC(密文分组链接方式)有点麻烦它的实现机制使加密的各段数据之间有了联系。其实现的机理如下加密步骤如下1)首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍用指定的PADDING数据补位)2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密得到第二组密文C24)之后的数据以此类推得到Cn5)按顺序连为C1C2C3......Cn即为加密结果。解密是加密的逆过程步骤如下1)首先将数据按照8个字节一组进行分组得到C1C2C3......Cn2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意一定是先解密再异或)3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D24)之后依此类推得到Dn5)按顺序连为D1D2D3......Dn即为解密结果。这里注意一点解密的结果并不一定是我们原来的加密数据可能还含有你补得位一定要把补位去掉才是你的原来的数据。*** DES算法*/public class DES {   /**   *   * return DES算法密钥   */   public static byte[] generateKey() {        try {            // DES算法要求有一个可信任的随机数源            SecureRandom sr new SecureRandom();            // 生成一个DES算法的KeyGenerator对象            KeyGenerator kg KeyGenerator.getInstance(DES);            kg.init(sr);            // 生成密钥            SecretKey secretKey kg.generateKey();            // 获取密钥数据            byte[] key secretKey.getEncoded();            return key;        } catch (NoSuchAlgorithmException e) {            System.err.println(DES算法生成密钥出错!);            e.printStackTrace();        }        return null;   }   /**   * 加密函数   *   * param data   *            加密数据   * param key   *            密钥   * return 返回加密后的数据   */   public static byte[] encrypt(byte[] data, byte[] key) {        try {            // DES算法要求有一个可信任的随机数源            SecureRandom sr new SecureRandom();            // 从原始密钥数据创建DESKeySpec对象            DESKeySpec dks new DESKeySpec(key);            // 创建一个密匙工厂然后用它把DESKeySpec转换成            // 一个SecretKey对象            SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES);            SecretKey secretKey keyFactory.generateSecret(dks);            // using DES in ECB mode            Cipher cipher Cipher.getInstance(DES/ECB/PKCS5Padding);            // 用密匙初始化Cipher对象            cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);            // 执行加密操作            byte encryptedData[] cipher.doFinal(data);            return encryptedData;        } catch (Exception e) {            System.err.println(DES算法加密数据出错!);            e.printStackTrace();        }        return null;   }   /**   * 解密函数   *   * param data   *            解密数据   * param key   *            密钥   * return 返回解密后的数据   */   public static byte[] decrypt(byte[] data, byte[] key) {        try {            // DES算法要求有一个可信任的随机数源            SecureRandom sr new SecureRandom();            // byte rawKeyData[] /* 用某种方法获取原始密匙数据 */;            // 从原始密匙数据创建一个DESKeySpec对象            DESKeySpec dks new DESKeySpec(key);            // 创建一个密匙工厂然后用它把DESKeySpec对象转换成            // 一个SecretKey对象            SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES);            SecretKey secretKey keyFactory.generateSecret(dks);            // using DES in ECB mode            Cipher cipher Cipher.getInstance(DES/ECB/PKCS5Padding);            // 用密匙初始化Cipher对象            cipher.init(Cipher.DECRYPT_MODE, secretKey, sr);            // 正式执行解密操作            byte decryptedData[] cipher.doFinal(data);            return decryptedData;        } catch (Exception e) {            System.err.println(DES算法解密出错。);            e.printStackTrace();        }        return null;   }   /**   * 加密函数   *   * param data   *            加密数据   * param key   *            密钥   * return 返回加密后的数据   */   public static byte[] CBCEncrypt(byte[] data, byte[] key, byte[] iv) {        try {            // 从原始密钥数据创建DESKeySpec对象            DESKeySpec dks new DESKeySpec(key);            // 创建一个密匙工厂然后用它把DESKeySpec转换成            // 一个SecretKey对象            SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES);            SecretKey secretKey keyFactory.generateSecret(dks);            // Cipher对象实际完成加密操作            Cipher cipher Cipher.getInstance(DES/CBC/PKCS5Padding);            // 若采用NoPadding模式data长度必须是8的倍数            // Cipher cipher Cipher.getInstance(DES/CBC/NoPadding);            // 用密匙初始化Cipher对象            IvParameterSpec param new IvParameterSpec(iv);            cipher.init(Cipher.ENCRYPT_MODE, secretKey, param);            // 执行加密操作            byte encryptedData[] cipher.doFinal(data);            return encryptedData;        } catch (Exception e) {            System.err.println(DES算法加密数据出错!);            e.printStackTrace();        }        return null;   }   /**   * 解密函数   *   * param data   *            解密数据   * param key   *            密钥   * return 返回解密后的数据   */   public static byte[] CBCDecrypt(byte[] data, byte[] key, byte[] iv) {        try {            // 从原始密匙数据创建一个DESKeySpec对象            DESKeySpec dks new DESKeySpec(key);            // 创建一个密匙工厂然后用它把DESKeySpec对象转换成            // 一个SecretKey对象            SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES);            SecretKey secretKey keyFactory.generateSecret(dks);            // using DES in CBC mode            Cipher cipher Cipher.getInstance(DES/CBC/PKCS5Padding);            // 若采用NoPadding模式data长度必须是8的倍数            // Cipher cipher Cipher.getInstance(DES/CBC/NoPadding);            // 用密匙初始化Cipher对象            IvParameterSpec param new IvParameterSpec(iv);            cipher.init(Cipher.DECRYPT_MODE, secretKey, param);            // 正式执行解密操作            byte decryptedData[] cipher.doFinal(data);            return decryptedData;        } catch (Exception e) {            System.err.println(DES算法解密出错。);            e.printStackTrace();        }        return null;   }   public static void main(String[] args) {        try {            byte[] key 11111111.getBytes();            byte[] iv 22222222.getBytes();            byte[] data DES.encrypt(ebc mode test.getBytes(), key);            System.out.print(EBC mode:);            System.out.println(new String(DES.decrypt(data, key)));            System.out.print(CBC mode:);            data DES.CBCEncrypt(cbc mode test.getBytes(), key, iv);            System.out.println(new String(DES.CBCDecrypt(data, key, iv)));                    } catch (Exception e) {            e.printStackTrace();        }   }}DES的几种填补方式DES是对64位数据的加密算法如数据位数不足64位的倍数需要填充补充到64位的倍数。NoPaddingAPI或算法本身不对数据进行处理加密数据由加密双方约定填补算法。例如若对字符串数据进行加解密可以补充\0或者空格然后trimPKCS5Padding加密前数据字节长度对8取余余数为m若m0,则补足8-m个字节字节数值为8-m即差几个字节就补几个字节字节数值即为补充的字节数若为0则补充8个字节的8解密后取最后一个字节值为m则从数据尾部删除m个字节剩余数据即为加密前的原文因为DES是一种block cipher一个block要8个字节所以要加密的东西要分成8字节的整数倍不足的就填充。PKCS5Padding这种填充填的字节代表所填字节的总数比如差三个字节的话填为 333差7个字节就填为 7777777没有差就填 88888888
http://www.huolong8.cn/news/125575/

相关文章:

  • 保定企业网站开发一般通过是什么意思
  • 网站建设需要掌握什么知识wordpress上传突然提示需要ftp
  • 响应式网站算几个页面wordpress怎么用地图
  • 支付宝手机网站广州网络营销类岗位
  • 如何做视频播放网站泰安网站开发推广
  • 网站建设及推广的书推进网站集约化建设 网络安全
  • 什么网站可以做翻译兼职专业电商网站建设哪家好
  • 长安大学门户网站是谁给做的科技公司网站制作模板
  • 网站建设初步规划手机网站页面设计尺寸
  • 国外有哪些做deal的网站新乐市住房和城乡建设局网站
  • 国外的网站叫什么电力建设网站
  • 网站设计流程包括做微信平台网站
  • 招商网站建设推广程序员除了做软件是不是就做网站
  • 怎样删除网站官方网站哪家做的最好
  • 免费的网站后台宠物网站素材
  • 网站被安全狗拦截哪个网站做海南二手房
  • 网站工信部实名认证中心wordpress怎样更换主题
  • 配资网站建设多少钱dns服务器 域名不存在时 跳转到指定网站
  • 网站界面ui设计静态网站是什么意思
  • 性价比高的seo网站优化wordpress标签的调用
  • 东莞网站排名优化公司手机app制作网站用什么软件
  • 单网页网站制作公司网站备案查询
  • 海门网站建设整人网站怎么做
  • 平谷微网站建设有什么做衣服的网站好
  • 自己做服务器的网站广州网站制作联系方式
  • 红酒网站建设模板网站优化大赛
  • cms网站内容管理系统电子公章印章在线制作
  • 常州外贸公司网站建设营销型建设网站实训总结
  • 重庆祥云平台做网站seo快速提升排名
  • 平面设计师常用的素材网站做编程的 网站有哪些