安卓网络请求数据时如何保证数据的完整性和安全性?使用哪种加密?

安卓网络请求数据时如何保证数据的完整性和安全性?使用哪种加密?,第1张

通过网络传输数据,需要保证数据的完整性、保密性,以及能够对数据的发送者进行身份验证。这些都需要通过一些加密算法实现。

对称加密:

加密和解密使用同一个密钥,特点:保证了数据的保密性。局限性:无法解决密钥交换问题。常用的算法有:DES,3DES,AES

公钥加密:

生成一个密钥对(私钥和公钥),加密时用私钥加密,解密时用公钥解密,特点:解决了密钥交换问题。局限性:对大的数据加密速度慢。

单向加密:

提取数据的特征码,特点:定长输出,不可逆,可检验数据的完整性。局限性:无法保证数据的保密性。常用算法:MD5、SHA1、CRC-32。

三种加密方法各有优缺点,在时实际应用中,数据从发送方到达接收方,通常是这样应用的:

1)首先对要发送的数据做单向加密,获取数据的特征码;

2)对特征码用发送方的私钥进行加密生成S1;

3)然后对S1和数据进行对称加密生成S2;

4)最后将S2和对称加密的密码使用接收方的公钥进行加密。

这样一来数据在传输过程中的完整性、保密性以及对发送方身份的验证都能得到保障。

当数据到达接收方时,接收方先用自己的私钥对接收到的数据进行解密,得到密码和加密的数据;使用密码对加密数据解密,得到加密的特征码和数据;用发送方的公钥解密特征码,如果能解密,则说明该数据是由发送方所发;反之则不是,这便实现了身份验证;最后计算数据的特征码和解密出来的特征码做对比,如果一样,则该数据没有被修改;反之则数据被修改过了。

数据库账号密码加密详解及实例

数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为spring security 中验证的加密方式是单独配置的。如下:

<authentication-manager>

<authentication-provider user-service-ref="userDetailService">

<password-encoder ref="passwordEncoder" />

</authentication-provider>

</authentication-manager>

<beans:bean class="com.sapphire.security.MyPasswordEncoder" id="passwordEncoder">

<beans:constructor-arg value="md5"></beans:constructor-arg>

</beans:bean>

如上述配置文件所示,passwordEncoder才是在spring security对账号加密校验的地方。

spring security在拦截之后,会首先对用户进行查找,通过自己定义的userDetailService来找到对应的用户,然后由框架进行密码的匹配验证。

从userDetailService得到user以后,就会进入到DaoAuthenticationProvider中,这是框架中定义的 ,然后跳入其中的authenticate方法中。

该方法会进行两个检查,分别是

* preAuthenticationChecks : 主要进行的是对用户是否过期等信息的校验,调用的方法在userDetail中有定义的。

* additionalAuthenticationChecks : 这个就是用户名密码验证的过程了。

而PasswordEncoder是我们xml中注入的bean,所以了,我们调用的则是我们自己完成的passwordEncoder

public class MyPasswordEncoder extends MessageDigestPasswordEncoder {

public MyPasswordEncoder(String algorithm) {

super(algorithm)

}

@Override

public boolean isPasswordValid(String encPass, String rawPass, Object salt) {

return encPass.equals(DigestUtils.md5DigestAsHex(rawPass.getBytes()))

}

}

这是我对其实现的一个简单版本,调用的就是spring自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

错误描述:

java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/org.xiaozhi-2/base.apk"],nativeLibraryDirectories=[/data/app/org.xiaozhi-2/lib/arm64,/data/app/org.xiaozhi-2/base.apk!/lib/arm64-v8a,/vendor/lib64,/system/lib64]]]couldn'tfind"libsqlcipher.so"

解决方案:

adb root

adb push \sqlcipher\android-database-sqlcipher-4.2.0\jni\arm64-v8a\libsqlcipher.so /system/lib64/

adb push \sqlcipher\android-database-sqlcipher-4.2.0\jni\armeabi-v7a\libsqlcipher.so /system/lib/


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6612022.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存