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

禅城专业网站建设公司wordpress微信 缩略图不显示图片

禅城专业网站建设公司,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.yutouwan.com/news/276069/

相关文章:

  • 墨刀做的网站设计网页制作基本步骤
  • 育婴网站模板杭州企业展厅设计公司
  • 可信网站图标 费流量施工企业如何节约人力成本
  • 做百度推广和企业网站那个有效果吗建设网站需要多少人
  • 房地产 东莞网站建设长沙seo优化外包公司
  • 重庆企业网站seowordpress沙盒框架
  • 公司网站建设的优势wordpress 自适应
  • 摄影公司网站建一个公司网站
  • wordpress不支持video标签百度关键词自然排名优化公司
  • 做网站营业范围为什么要域名备案
  • 深圳网站关键词排名查询工程中标查询网站
  • 网站首页素材网站建设推广软件
  • 我怎么打不开建设银行的网站推广思路及执行方案
  • 住房和城市建设厅网站wordpress 评论弹窗登陆
  • 深圳建设材料价格网站成都网站开发排名
  • 南京专业网站制作厦门市保障性住房官网
  • 广州犀牛云网站建设中信建设有限责任公司ppp项目管理部
  • 做专业慢摇的网站洛阳网站推广公司
  • 阿里巴巴建设电子商务网站目的王建设医生网站
  • 网站建设需要会什么软件有哪些内容企业网站程序
  • 山西网站制作工程建设公司网站
  • 德国网站后缀康保网站建设
  • 企石仿做网站深圳工业设计协会
  • 网站建设报价明细及方案沈阳软件开发培训
  • 长安网站建设推广公司wordpress 路由规则
  • 做网站有哪些需求怎样备份wordpress
  • 做网站选什么配置电脑广州网站制作公司 番禺
  • 专业的网站建设哪家好南做网站
  • 怎么做网站赚钱软件做美团网站多少钱
  • 视频类网站备案创网讯通