《实现凯撒密码的加密》由会员分享,可在线阅读,更多相关《实现凯撒密码的加密(17页珍藏版)》请在金锄头文库上搜索。
1、实现凯撒密码的加密、解密过程。 输入明文。密钥#include #include int main() char s100,c;int i,p,d,e;printf(“请选择 : A.加密 B.解密 Q.退出n“);scanf(“%c“,if(c=a|c=A)printf(“输入明文:“);scanf(“%s“,p=strlen(s);printf(“请设置偏移量:“);scanf(“%d“,for(i=0;i=a int iLen = arrB.length;/ 两个字符表示一个字节,所以字节数组长度是字符串长度除以 2byte arrOut = new byteiLen / 2;for (
2、int i = 0; i 22 * RSA 同时有两把钥匙,公钥与私钥。同时支持数字签名。23 * 数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输过程中不被修改。24 * 25 * 流程分析:26 * 甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。27 * 甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。28 * 乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。 29 * 30 * 31 * author Ice_Liu32 * 33 *
3、/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
4、* param data44 * 加密数据45 * param privateKey46 * 私钥47 * 48 * return49 * throws Exception50 */51 public static String sign(byte data, String privateKey) throws Exception 52 / 解密由 base64 编码的私钥53 byte keyBytes = CryptUtil.decryptBASE64(privateKey);54 / 构造 PKCS8EncodedKeySpec 对象55 PKCS8EncodedKeySpec pkcs
5、8KeySpec = 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 s
6、ignature.initSign(priKey);63 signature.update(data);64 return CryptUtil.encryptBASE64(signature.sign();65 66 67 /*68 * 校验数字签名69 * 70 * param data71 * 加密数据72 * param publicKey73 * 公钥74 * param sign75 * 数字签名76 * 77 * return 校验成功返回 true 失败返回 false78 * throws Exception79 * 80 */81 public static boolean
7、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.g
8、etInstance(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 /
9、*98 * 解密99 * 用私钥解密100 * 101 * param data102 * param key103 * return104 * throws Exception105 */106 public static byte decryptByPrivateKey(byte data, String key) throws Exception 107 / 对密钥解密108 byte keyBytes = CryptUtil.decryptBASE64(key);109 / 取得私钥110 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8Enco
10、dedKeySpec(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(
11、data);117 118 119 /*120 * 解密121 * 用私钥解密122 * 123 * param data124 * param key125 * return126 * throws Exception127 */128 public static byte decryptByPublicKey(byte data, String key) throws Exception 129 / 对密钥解密130 byte keyBytes = CryptUtil.decryptBASE64(key);131 / 取得公钥132 X509EncodedKeySpec x509KeySp
12、ec = new X509EncodedKeySpec(keyBytes);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 ci
13、pher.doFinal(data);139 140 141 /*142 * 加密143 * 用公钥加密144 * 145 * param data146 * param key147 * return148 * throws Exception149 */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 = Ciph