首页 实现凯撒密码的加密

实现凯撒密码的加密

举报
开通vip

实现凯撒密码的加密实现凯撒密码的加密 实现凯撒密码的加密、解密过程。 输入明文。密钥 #include #include int main() { char s[100],c; int i,p,d,e; printf("请选择 : A.加密 B.解密 Q.退出\n"); scanf("%c",&c); if(c=='a'||c=='A') { printf("输入明文:"); scanf("%s",&s); p=strlen(s); printf("请设置偏移量:"); scanf("%d",&d)...

实现凯撒密码的加密
实现凯撒密码的加密 实现凯撒密码的加密、解密过程。 输入明文。密钥 #include #include int main() { char s[100],c; int i,p,d,e; printf("请选择 : A.加密 B.解密 Q.退出\n"); scanf("%c",&c); if(c=='a'||c=='A') { printf("输入明文:"); scanf("%s",&s); p=strlen(s); printf("请设置偏移量:"); scanf("%d",&d); for(i=0;i='a' && s[i]<='z') s[i]=(s[i]-'a'+d)%26+'a'; else if(s[i]>='A' && s[i]<='Z') s[i]=(s[i]-'A'+d)%26+'A'; else s[i]=s[i]+d; } printf("%s",s); printf("\n\n\n"); } if(c=='b'||c=='B') { printf("请输入密文:"); scanf("%s",&s); p=strlen(s); printf("请输入加密的偏移变量:"); scanf("%d",&d); for(i=0;i='a' && s[i]<='z') { e=s[i]-'a'-d; if(e<=0) s[i]=(e+26)%26+'a'; else s[i]=e%26+'a'; } else if(s[i]>='A' && s[i]<='Z') { e=s[i]-'A'-d; if(e<0) s[i]=(e+26)%26+'A'; else s[i]=e%26+'A'; } else s[i]=s[i]-d; } printf("%s",s); printf("\n\n"); } if(c=='q'||c=='Q') return 0; return 0; } JAVA实现的DES加密解密算法(源程序)(lp) 2008-04-21 13:28 994人阅读 评论(1) 收藏 举报 public class DESPlus { private static String strDefaultKey = "www.57market.com.cn"; private Cipher encryptCipher = null; private Cipher decryptCipher = null; /** * 将byte数组转换为 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[] * hexStr2ByteArr(String strIn) 互为可逆的转换过程 * * @param arrB * 需要转换的byte数组 * @return 转换后的字符串 en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i * @throws Exception * 本方法不处理任何异常,所有异常全部抛出 */ public static String byteArr2HexStr(byte[] arrB) throws Exception { int iLen = arrB.length; // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍 StringBuffer sb = new StringBuffer(iLen * 2); for (int i = 0; i < iLen; i++) { int intTmp = arrB[i]; // 把负数转换为正数 while (intTmp < 0) { intTmp = intTmp + 256; } // 小于0F的数需要在前面补0 if (intTmp < 16) { sb.append("0"); } sb.append(Integer.toString(intTmp, 16)); } return sb.toString(); } /** * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB) * 互为可逆的转换过程 * * @param strIn * 需要转换的字符串 * @return 转换后的byte数组 * @throws Exception * 本方法不处理任何异常,所有异常全部抛出 * @author LiGuoQing */ public static byte[] hexStr2ByteArr(String strIn) throws Exception { byte[] arrB = strIn.getBytes(); int iLen = arrB.length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2 byte[] arrOut = new byte[iLen / 2]; for (int i = 0; i < iLen; i = i + 2) { String strTmp = new String(arrB, i, 2); arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16); } return arrOut; } /** * 默认构造方法,使用默认密钥 * * @throws Exception */ public DESPlus() throws Exception { this(strDefaultKey); } /** * 指定密钥构造方法 * * @param strKey * 指定的密钥 * @throws Exception */ public DESPlus(String strKey) throws Exception { Security.addProvider(new com.sun.crypto.provider.SunJCE()); Key key = getKey(strKey.getBytes()); encryptCipher = Cipher.getInstance("DES"); en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i encryptCipher.init(Cipher.ENCRYPT_MODE, key); decryptCipher = Cipher.getInstance("DES"); decryptCipher.init(Cipher.DECRYPT_MODE, key); } /** * 加密字节数组 * * @param arrB * 需加密的字节数组 * @return 加密后的字节数组 * @throws Exception */ public byte[] encrypt(byte[] arrB) throws Exception { return encryptCipher.doFinal(arrB); } /** * 加密字符串 * * @param strIn * 需加密的字符串 * @return 加密后的字符串 * @throws Exception */ public String encrypt(String strIn) throws Exception { return byteArr2HexStr(encrypt(strIn.getBytes())); } /** * 解密字节数组 * * @param arrB * 需解密的字节数组 * @return 解密后的字节数组 * @throws Exception */ public byte[] decrypt(byte[] arrB) throws Exception { return decryptCipher.doFinal(arrB); } /** * 解密字符串 * * @param strIn * 需解密的字符串 * @return 解密后的字符串 * @throws Exception */ public String decrypt(String strIn) throws Exception { return new String(decrypt(hexStr2ByteArr(strIn))); } /** * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位 * * @param arrBTmp * 构成该字符串的字节数组 * @return 生成的密钥 * @throws java.lang.Exception */ private Key getKey(byte[] arrBTmp) throws Exception { // 创建一个空的8位字节数组(默认值为0) byte[] arrB = new byte[8]; // 将原始字节数组转换为8位 for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { arrB[i] = arrBTmp[i]; en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i } // 生成密钥 Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES"); return key; } public static void main(String[] args) { // TODO Auto-generated method stub try { String test = "Hellow Word!顺便测个中文"; //DESPlus des = new DESPlus();//默认密钥 DESPlus des = new DESPlus("leemenz");//自定义密钥 System.out.println("加密前的字符:"+test); System.out.println("加密后的字符:"+des.encrypt(test)); System.out.println("解密后的字符: "+des.decrypt(des.encrypt(test))); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } 运行结果: 加密前的字符:Hellow Word!顺便测个中文 加密后的字符:6b189a916ce2477f90801b7a43fc18d9 解密后的字符:Hellow Word! 顺便测个中文 1 package com.ice.webos.util.security; 2 3 import java.math.BigInteger; 4 import java.security.Key; 5 import java.security.KeyFactory; 6 import java.security.KeyPair; 7 import java.security.KeyPairGenerator; 8 import java.security.PrivateKey; 9 import java.security.PublicKey; 10 import java.security.Signature; 11 import java.security.interfaces.RSAPrivateKey; 12 import java.security.interfaces.RSAPublicKey; 13 import java.security.spec.PKCS8EncodedKeySpec; 14 import java.security.spec.X509EncodedKeySpec; 15 import java.util.HashMap; 16 import java.util.Map; 17 18 import javax.crypto.Cipher; 19 20 /** 21 * RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。
22 * RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。
23 * 数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输过程中不被修改。 24 *
    25 * 流程分析: 26 *
  • 甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
  • 27 *
  • 甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
  • 28 *
  • 乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
  • 29 *
      30 * 31 * @author Ice_Liu 32 * 33 */ 34 public class RSACryptUtil { 35 public static final String KEY_ALGORITHM = "RSA"; 36 public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; 37 private static final String PUBLIC_KEY = "RSAPublicKey"; 38 private static final String PRIVATE_KEY = "RSAPrivateKey"; 39 40 /** 41 * 用私钥对信息生成数字签名 42 * 43 * @param data 44 * 加密数据 45 * @param privateKey 46 * 私钥 47 * 48 * @return 49 * @throws Exception 50 */ en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i 51 public static String sign(byte[] data, String privateKey) throws Exception { 52 // 解密由base64编码的私钥 53 byte[] keyBytes = CryptUtil.decryptBASE64(privateKey); 54 // 构造PKCS8EncodedKeySpec对象 55 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); 56 // KEY_ALGORITHM 指定的加密算法 57 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 58 // 取私钥匙对象 59 PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); 60 // 用私钥对信息生成数字签名 61 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); 62 signature.initSign(priKey); 63 signature.update(data); 64 return CryptUtil.encryptBASE64(signature.sign()); 65 } 66 67 /** 68 * 校验数字签名 69 * 70 * @param data 71 * 加密数据 72 * @param publicKey 73 * 公钥 74 * @param sign 75 * 数字签名 76 * 77 * @return 校验成功返回true 失败返回false 78 * @throws Exception 79 * 80 */ 81 public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { 82 // 解密由base64编码的公钥 83 byte[] keyBytes = CryptUtil.decryptBASE64(publicKey); 84 // 构造X509EncodedKeySpec对象 85 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); 86 // KEY_ALGORITHM 指定的加密算法 87 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 88 // 取公钥匙对象 89 PublicKey pubKey = keyFactory.generatePublic(keySpec); 90 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); 91 signature.initVerify(pubKey); 92 signature.update(data); 93 // 验证签名是否正常 94 return signature.verify(CryptUtil.decryptBASE64(sign)); 95 } 96 97 /** 98 * 解密
      99 * 用私钥解密 100 * 101 * @param data 102 * @param key 103 * @return 104 * @throws Exception 105 */ 106 public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception { 107 // 对密钥解密 108 byte[] keyBytes = CryptUtil.decryptBASE64(key); 109 // 取得私钥 110 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); 111 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 112 Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); 113 // 对数据解密 114 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); 115 cipher.init(Cipher.DECRYPT_MODE, privateKey); 116 return cipher.doFinal(data); 117 } 118 119 /** 120 * 解密
      121 * 用私钥解密 122 * 123 * @param data 124 * @param key 125 * @return 126 * @throws Exception 127 */ 128 public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception { 129 // 对密钥解密 130 byte[] keyBytes = CryptUtil.decryptBASE64(key); 131 // 取得公钥 132 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i 133 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 134 Key publicKey = keyFactory.generatePublic(x509KeySpec); 135 // 对数据解密 136 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); 137 cipher.init(Cipher.DECRYPT_MODE, publicKey); 138 return cipher.doFinal(data); 139 } 140 141 /** 142 * 加密
      143 * 用公钥加密 144 * 145 * @param data 146 * @param key 147 * @return 148 * @throws Exception 149 */ 150 public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { 151 // 对公钥解密 152 byte[] keyBytes = CryptUtil.decryptBASE64(key); 153 // 取得公钥 154 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); 155 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 156 Key publicKey = keyFactory.generatePublic(x509KeySpec); 157 // 对数据加密 158 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); 159 cipher.init(Cipher.ENCRYPT_MODE, publicKey); 160 return cipher.doFinal(data); 161 } 162 163 /** 164 * 加密
      165 * 用私钥加密 166 * 167 * @param data 168 * @param key 169 * @return 170 * @throws Exception 171 */ 172 public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception { 173 // 对密钥解密 174 byte[] keyBytes = CryptUtil.decryptBASE64(key); 175 // 取得私钥 176 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); 177 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); 178 Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); 179 // 对数据加密 180 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); 181 cipher.init(Cipher.ENCRYPT_MODE, privateKey); 182 return cipher.doFinal(data); 183 } 184 185 /** 186 * 取得私钥 187 * 188 * @param keyMap 189 * @return 190 * @throws Exception 191 */ 192 public static String getPrivateKey(Map keyMap) throws Exception { 193 Key key = (Key) keyMap.get(PRIVATE_KEY); 194 return CryptUtil.encryptBASE64(key.getEncoded()); 195 } 196 197 /** 198 * 取得公钥 199 * 200 * @param keyMap 201 * @return 202 * @throws Exception 203 */ 204 public static String getPublicKey(Map keyMap) throws Exception { 205 Key key = (Key) keyMap.get(PUBLIC_KEY); 206 return CryptUtil.encryptBASE64(key.getEncoded()); 207 } 208 209 /** 210 * 初始化密钥 211 * 212 * @return 213 * @throws Exception 214 */ 215 public static Map initKey() throws Exception { en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i 216 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); 217 keyPairGen.initialize(1024); 218 KeyPair keyPair = keyPairGen.generateKeyPair(); 219 // 公钥 220 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); 221 // 私钥 222 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); 223 Map keyMap = new HashMap(2); 224 keyMap.put(PUBLIC_KEY, publicKey); 225 keyMap.put(PRIVATE_KEY, privateKey); 226 return keyMap; 227 } 228 229 /** 230 * @param args 231 */ 232 public static void main(String[] args) { 233 try { 234 PBECryptUtil.main(args); 235 System.out.println("****************************************"); 236 System.out.println("=====RSA加密与解密====="); 237 // 初始化公钥,私钥 238 Map keyMap = initKey(); 239 String publicKey = RSACryptUtil.getPublicKey(keyMap); 240 String privateKey = RSACryptUtil.getPrivateKey(keyMap); 241 System.out.println("公钥: \n\r" + publicKey); 242 System.out.println("私钥: \n\r" + privateKey); 243 System.out.println("公钥加密——私钥解密"); 244 String inputStr = "阿伯才的覆盖"; 245 byte[] data = inputStr.getBytes("UTF-8"); 246 // 公钥加密 247 byte[] encodedData = RSACryptUtil.encryptByPublicKey(data, publicKey); 248 System.out.println("公钥加密后:" + new BigInteger(encodedData).toString(32)); 249 // 私钥解密 250 byte[] decodedData = RSACryptUtil.decryptByPrivateKey(encodedData, privateKey); 251 String outputStr = new String(decodedData, "UTF-8"); 252 System.out.println("加密前: " + inputStr); 253 System.out.println("解密后: " + outputStr); 254 255 System.out.println("私钥加密——公钥解密"); 256 // 私钥加密 257 encodedData = RSACryptUtil.encryptByPrivateKey(data, privateKe y); 258 System.out.println("私钥加密后:" + new BigInteger(encodedData).toString(32)); 259 // 公钥解密 260 decodedData = RSACryptUtil.decryptByPublicKey(encodedData, publ icKey); 261 outputStr = new String(decodedData, "UTF-8"); 262 System.out.println("加密前: " + inputStr); 263 System.out.println("解密后: " + outputStr); 264 265 System.out.println("私钥签名——公钥验证签名"); 266 // 使用私钥产生签名 267 String sign = RSACryptUtil.sign(encodedData, privateKey); 268 System.out.println("签名:" + sign); 269 // 使用公匙验证签名 270 boolean status = RSACryptUtil.verify(encodedData, publicKey, si gn); 271 System.err.println("验证签名结果:" + status); 272 } catch (Exception e) { 273 // TODO Auto-generated catch block 274 e.printStackTrace(); 275 } 276 277 } 278 279 } 1. package com.taiji.fzb.util; 2. 3. import javax.crypto.*; 4. import javax.crypto.spec.DESKeySpec; 5. 6. import java.security.NoSuchAlgorithmException; 7. import java.security.InvalidKeyException; 8. import java.security.SecureRandom; 9. import java.security.spec.InvalidKeySpecException; 10. 11. /** en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i 12. * 通过DES加密解密实现一个String字符串的加密和解密. 13. * 14. * @author badpeas 15. * 16. */ 17. public class EncryptDecryptData { 18. 19. public static void main(String[] args) throws NoSuchAlgorithmExc eption, 20. InvalidKeyException, NoSuchPaddingException, 21. InvalidKeySpecException, IllegalBlockSizeException, 22. BadPaddingException { 23. // 1.1 >>> 首先要创建一个密匙 24. // DES算法要求有一个可信任的随机数源 25. SecureRandom sr = new SecureRandom(); 26. // 为我们选择的DES算法生成一个KeyGenerator对象 27. KeyGenerator kg = KeyGenerator.getInstance("DES"); 28. kg.init(sr); 29. // 生成密匙 30. SecretKey key = kg.generateKey(); 31. // 获取密匙数据 32. //byte rawKeyData[] = key.getEncoded(); 33. byte rawKeyData[] = "sucre".getBytes(); 34. System.out.println("密匙===>" + rawKeyData); 35. 36. String str = "hi.baidu.com/beijingalana"; // 待加密数据 37. // 2.1 >>> 调用加密方法 38. byte[] encryptedData = encrypt(rawKeyData, str); 39. // 3.1 >>> 调用解密方法 40. decrypt(rawKeyData, encryptedData); 41. } 42. 43. /** 44. * 加密方法 45. * 46. * @param rawKeyData 47. * @param str 48. * @return 49. * @throws InvalidKeyException 50. * @throws NoSuchAlgorithmException 51. * @throws IllegalBlockSizeException 52. * @throws BadPaddingException 53. * @throws NoSuchPaddingException 54. * @throws InvalidKeySpecException 55. */ 56. public static byte[] encrypt(byte rawKeyData[], String str) 57. throws InvalidKeyException, NoSuchAlgorithmException, 58. IllegalBlockSizeException, BadPaddingException, 59. NoSuchPaddingException, InvalidKeySpecException { 60. // DES算法要求有一个可信任的随机数源 61. SecureRandom sr = new SecureRandom(); 62. // 从原始密匙数据创建一个DESKeySpec对象 63. DESKeySpec dks = new DESKeySpec(rawKeyData); 64. // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象 65. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(" DES"); 66. SecretKey key = keyFactory.generateSecret(dks); 67. // Cipher对象实际完成加密操作 68. Cipher cipher = Cipher.getInstance("DES"); 69. // 用密匙初始化Cipher对象 70. cipher.init(Cipher.ENCRYPT_MODE, key, sr); 71. // 现在,获取数据并加密 72. byte data[] = str.getBytes(); 73. // 正式执行加密操作 74. byte[] encryptedData = cipher.doFinal(data); 75. 76. System.out.println("加密后===>" + encryptedData); 77. return encryptedData; 78. } 79. 80. /** 81. * 解密方法 82. * 83. * @param rawKeyData 84. * @param encryptedData 85. * @throws IllegalBlockSizeException 86. * @throws BadPaddingException 87. * @throws InvalidKeyException 88. * @throws NoSuchAlgorithmException 89. * @throws NoSuchPaddingException 90. * @throws InvalidKeySpecException 91. */ 92. public static String decrypt(byte rawKeyData[], byte[] encrypted Data) 93. throws IllegalBlockSizeException, BadPaddingException, 94. InvalidKeyException, NoSuchAlgorithmException, 95. NoSuchPaddingException, InvalidKeySpecException { 96. // DES算法要求有一个可信任的随机数源 en les característiques de producció i l'equip, estan equipats amb un conjunt de dues classes de maquinària, eines de transferència, un conjunt d'eines, ús d'eines personal de connexió, danyar pèrdua a càrrec de la responsable, sense una màquina eina treballadors de producció en principi estan equipats amb eines. Eines comunes, en principi, per la producció de la líder del grup és responsables, com el públic, no es poden realitzar cèntrica amb l'establiment sala botiga eina de comptes públics i endeutament. l'article 20 dels individus manera estan equipades amb les eines, ho farem estrictament control, eina imprescindible disponible, eines de préstecs temporals no utilitzats. Màquines eines, oficis i eines grup comunament utilitzades amb taula objecte està equipat amb equipades amb comú eines torn 1, Vernier 1-2, 2... Disc de bol del nombre en sèrie eina nom ferralla 14 estàndard en forma de Tap dent ganivet 1, col. lapse rematat i dividir dent 2 i dent llarga direcció és menys original longitud 2/5 15 la passar endoll clau dent ganivet pot referenciar amb ganivet de tipus eina maneta 16 dents afaitat Nota: molí de fulla de dents afaitat que altra eina complex, equivalent al negoci que fer nova eina i detecció de paràmetre de tecnologia també més, cada vorejada molí són per al càlcul, afaitat dent ganivet desgast de l'estàndard de tecnologia segons específica de condicions tècnic d'eina de secció de eina per determinar. 17 fitxer 1 i dent no agut, les 18 activitats patí de artefactes (duresa en HRC30 dins) de fitxer clau 1 i cuc cuc engranar superfície no a un segon 2 i mandíbula graus no paral•leles pinça de cable 19 més tres cinquenes parts i 97. SecureRandom sr = new SecureRandom(); 98. // 从原始密匙数据创建一个DESKeySpec对象 99. DESKeySpec dks = new DESKeySpec(rawKeyData); 100. // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对 象 101. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(" DES"); 102. SecretKey key = keyFactory.generateSecret(dks); 103. // Cipher对象实际完成解密操作 104. Cipher cipher = Cipher.getInstance("DES"); 105. // 用密匙初始化Cipher对象 106. cipher.init(Cipher.DECRYPT_MODE, key, sr); 107. // 正式执行解密操作 108. byte decryptedData[] = cipher.doFinal(encryptedData); 109. System.out.println("解密后 ===>" + new String(decryptedData)); 110. return new String(decryptedData); 111. } 112. 113. }
本文档为【实现凯撒密码的加密】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_729658
暂无简介~
格式:doc
大小:88KB
软件:Word
页数:36
分类:生活休闲
上传时间:2017-09-20
浏览量:29