java和ios加密
‘壹’ iOS 纯DES 解密的结果 和java 的不一致 是怎么回事。 java 用的 ("DES/ECB/NoPadding") 这个模式
DES没试过,试过iOS和java都用AES加密解密,大概的初始化是这样:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
估计应该差不多,别用没有填充的(NoPadding)试试,iOS的实现好像都是有填充的。
‘贰’ iOS 使用DES加密,加密结果跟安卓 java不一样,有没有遇到过的 0 0
话说,加密的时候算法不是一个DES参数就够的,后面有迭代方式,补位方式两个参数呢,没用过DES,用过3DES(DESede),声明算法的时候要DESede/CBC/ZeroPadding。。。另外,有些算法加密出的结果有随机性,但解密结果是一样的
‘叁’ Java服务端和iOS客户端对字符串生成的Base64加密结果不一致,如何解决
最好是用同一套加密机制,这样可以保证数据的一致性。
‘肆’ java里面的aes加密再ios中怎么解密
中文用于网络传输要先用 java.net.URLEncoder 的encode方法加密再调用你自己的加密方法。
反过来,接收到密文的时候在调用自己的解密方法解密后需再调用 java.net.URLDecoder 解密,这样中文就正常了
‘伍’ IOS AES加密
AES加密有四种工作模式:ECB、CBC、CFB和OFB,其中IOS支持ECB(kCCOptionPKCS7Padding 对应Java中的kCCOptionPKCS5Padding)和CBC(kCCOptionECBMode)
AES是开发中常用的加密算法之一。然而由于前后端开发使用的语言不统一,导致经常出现前端加密而后端不能解密的情况出现。然而无论什么语言系统,AES的算法总是相同的, 因此导致结果不一致的原因在于 加密设置的参数不一致 。于是先来看看在两个平台使用AES加密时需要统一的几个参数。
参考: https://welkinx.com/2016/07/30/10/
ios中使用AES128位 ECB模式加密 结果转换16进制
https://tieba..com/p/4581819586
与服务器通讯的时候,除了确定密钥外,加密模式和填充方式也要确定。第一个例子中,就是使用了kCCOptionPKCS7Padding加密模式,并且有IV(初始向量),而第二个例子中使用了ECB(没有补码方式)。
此外也要注意转码后的密文是转成16进制,还是base64编码。
参考链接:
http://blog.51cto.com/ciphertext/1420338
https://welkinx.com/2016/07/30/10/
https://tieba..com/p/4581819586
‘陆’ 怎么在ios进行rsa公钥加密,java做rsa私钥解密
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair(); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //把第二个参数改为 key.getPrivate() cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); byte[] cipherText = cipher.doFinal("Message".getBytes("UTF8")); System.out.println(new String(cipherText, "UTF8")); //把第二个参数改为key.getPublic() cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()); byte[] newPlainText = cipher.doFinal(cipherText); System.out.println(new String(newPlainText, "UTF8")); 正常的用公钥加密私钥解密就是这个过程,如果按私钥加密公钥解密,只要按备注改2个参数就可以。 但是我要提醒楼主,你要公钥解密,公钥是公开的,相当于任何人都查到公钥可以解密。 你是想做签名是吧。
‘柒’ 怎么在ios进行rsa公钥加密,java做rsa私钥解密
rsa既可以做加密也可以做签名。做加密时:用公钥加密,私钥解密。做签名时,用私钥签名,公钥验证。这两种是rsa算法的不同应用情形。
‘捌’ 关于IOS客户端使用AES加密(解密),云端java实现加密(解密)不一致的问题。
对AES不了解,但可以考虑将解密作个DLL,java的jni机制调用。。。
‘玖’ iOS RSA加密生成公钥私钥
该命令生成一个模长 2048 位,名字为 rsa_private_key.pem 、 PKCS1 格式的 RSA 私钥文件.
genrsa :指定生成算法使用 RSA
-out :后面参数是生成的私钥的文件名
2048 :生成私钥的模长,单位字节(bits)
根据生成的私钥 rsa_private_key.pem 文件,生成公钥 rsa_public_key.pem 文件
生成名字为 rsa_pkcs8_private_key.pem 的私钥文件
Java 和 Android 用到的密钥:
公钥: rsa_public_key.pem
私钥: rsa_pkcs8_private_key.pem
终端会提示输入国家、省市、所在地、组织、组织单位、常用名称、邮箱地址等信息,按要求填写(可以随便填写), 输入完对应信息后会提示输入一个密码 :
最终会生成 rsacert.csr 文件
用最开始生成的私钥 rsa_private_key.pem 和 rsacert.csr 证书请求文件生成一个数字证书 rsacert.crt
使用 x509 工具自建CA。由于 x509 无法建立证书请求文件,所以只能使用 openssl req 来生成请求文件,然后使用 x509 来自签署, 也可以用来签署他人的证书请求,即为他人颁发证书。
知识点 :
终端会提示设置密码,该密码是 .p12 私钥的密码(用 private_key.p12 私钥解密时, 要用到该密码, 需要记录下 ), 会提示再次输入检验刚才输入的密码.