android上传图片base64
⑴ AndroidKeyStore Cipher简单使用
Android开发中,敏感数据存储需求提升,Android提供了Cipher加密方式,确保数据安全性。
初始化Cipher生成iv,随机数组作为解密钥匙,每次init确保iv独特性,增加私密性。
获取Cipher的SecretKey,为初始化后的Cipher提供密钥支持。
实现加密功能,针对json数据加密,iv数组进行Base64加密保存,增加数据安全。
解密过程,确保数据完整性。
加密数据保存到SharePerference,提供额外安全保障,相比于早期MD5、AES、DES等固定密钥方法,Cipher方式更简洁方便。
适合session、token、用户信息等敏感数据加密,确保数据在手机存储过程中的安全。
建议开发者在实际应用中参考此方法,提升数据存储安全水平。
⑵ 跪求 DES跨(C# Android IOS)三个平台通用的加解密方法
#region跨平台加解密(c#安卓IOS)
//publicstaticstringsKey="12345678";
/////<summary>
/////解密
/////</summary>
/////<paramname="pToDecrypt">要解密的以Base64</param>
/////<paramname="sKey">密钥,且必须为8位</param>
/////<returns>已解密的字符串</returns>
//publicstaticstringDesDecrypt(stringpToDecrypt)
//{
////转义特殊字符
//pToDecrypt=pToDecrypt.Replace("-","+");
//pToDecrypt=pToDecrypt.Replace("_","/");
//pToDecrypt=pToDecrypt.Replace("~","=");
//byte[]inputByteArray=Convert.FromBase64String(pToDecrypt);
//using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider())
//{
//des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
//des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
//System.IO.MemoryStreamms=newSystem.IO.MemoryStream();
//using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write))
//{
//cs.Write(inputByteArray,0,inputByteArray.Length);
//cs.FlushFinalBlock();
//cs.Close();
//}
//stringstr=Encoding.UTF8.GetString(ms.ToArray());
//ms.Close();
//returnstr;
//}
//}
/////<summary>
/////对字符串进行DES加密
/////</summary>
/////<paramname="sourceString">待加密的字符串</param>
/////<returns>加密后的BASE64编码的字符串</returns>
//publicstringEncrypt(stringsourceString)
//{
//byte[]btKey=Encoding.UTF8.GetBytes(sKey);
//byte[]btIV=Encoding.UTF8.GetBytes(sKey);
//DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
//using(MemoryStreamms=newMemoryStream())
//{
//byte[]inData=Encoding.UTF8.GetBytes(sourceString);
//try
//{
//using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(btKey,btIV),CryptoStreamMode.Write))
//{
//cs.Write(inData,0,inData.Length);
//cs.FlushFinalBlock();
//}
//returnConvert.ToBase64String(ms.ToArray());
//}
//catch
//{
//throw;
//}
//}
//}
#endregion
安卓---------------------------------------------------------------------------
////加密
//(Stringmessage,Stringkey)
//throwsException{
//byte[]bytesrc=Base64.decode(message.getBytes(),Base64.DEFAULT);
//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");
//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));
//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);
//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.DECRYPT_MODE,secretKey,iv);
//byte[]retByte=cipher.doFinal(bytesrc);
//returnnewString(retByte);
//}
////解密
//(Stringmessage,Stringkey)
//throwsException{
//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");
//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));
//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);
//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);
//byte[]encryptbyte=cipher.doFinal(message.getBytes());
//returnnewString(Base64.encode(encryptbyte,Base64.DEFAULT));
//}
Ios--------------------------------------------------------------------------------------------------------------------
staticconstchar*encryptWithKeyAndType(constchar*text,CCOperationencryptOperation,char*key)
{
NSString*textString=[[NSStringalloc]initWithCString:textencoding:NSUTF8StringEncoding];
//NSLog(@"[[item.urldescription]UTF8String=%@",textString);
constvoid*dataIn;
size_tdataInLength;
if(encryptOperation==kCCDecrypt)//传递过来的是decrypt解码
{
//解码base64
NSData*decryptData=[GTMBase64decodeData:[textStringdataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
dataInLength=[decryptDatalength];
dataIn=[decryptDatabytes];
}
else//encrypt
{
NSData*encryptData=[textStringdataUsingEncoding:NSUTF8StringEncoding];
dataInLength=[encryptDatalength];
dataIn=(constvoid*)[encryptDatabytes];
}
CCCryptorStatusccStatus;
uint8_t*dataOut=NULL;//可以理解位type/typedef的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
size_tdataOutAvailable=0;//size_t是操作符sizeof返回的结果类型
size_tdataOutMoved=0;
dataOutAvailable=(dataInLength+kCCBlockSizeDES)&~(kCCBlockSizeDES-1);
dataOut=malloc(dataOutAvailable*sizeof(uint8_t));
memset((void*)dataOut,00,dataOutAvailable);//将已开辟内存空间buffer的首1个字节的值设为值0
//NSString*initIv=@"12345678";
constvoid*vkey=key;
constvoid*iv=(constvoid*)key;//[initIvUTF8String];
//CCCrypt函数加密/解密
ccStatus=CCCrypt(encryptOperation,//加密/解密
kCCAlgorithmDES,//加密根据哪个标准(des,3des,aes。。。。)
kCCOptionPKCS7Padding,//选项分组密码算法(des:对每块分组加一次密3DES:对每块分组加三个不同的密)
vkey,//密钥加密和解密的密钥必须一致
kCCKeySizeDES,//DES密钥的大小(kCCKeySizeDES=8)
iv,//可选的初始矢量
dataIn,//数据的存储单元
dataInLength,//数据的大小
(void*)dataOut,//用于返回数据
dataOutAvailable,
&dataOutMoved);
NSString*result=nil;
if(encryptOperation==kCCDecrypt)//encryptOperation==1解码
{
//得到解密出来的data数据,改变为utf-8的字符串
result=[[NSStringalloc]initWithData:[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved]encoding:NSUTF8StringEncoding];
}
else//encryptOperation==0(加密过程中,把加好密的数据转成base64的)
{
//编码base64
NSData*data=[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved];
result=[GTMBase64stringByEncodingData:data];
}
return[resultUTF8String];
}
+(NSString*)encryptWithContent:(NSString*)contenttype:(CCOperation)typekey:(NSString*)aKey
{
constchar*contentChar=[contentUTF8String];
char*keyChar=(char*)[aKeyUTF8String];
constchar*miChar;
miChar=encryptWithKeyAndType(contentChar,type,keyChar);
return[NSStringstringWithCString:miCharencoding:NSUTF8StringEncoding];
}
⑶ android 怎么多图上传 okhttp
android上传图片是先将图片文件转换成流文件:可用以下代码转换流文件,imgPath为图片的完整地址
//图片转化成base64字符串
public static String imgToBase64(String imgPath) {
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try {
in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e){
e.printStackTrace();
}
//对字节数组Base64编码
sun.misc.BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);//返回Base64编码过的字节数组字符串
}
然后图片文件就成为一串字符串啦,传递方法和普通字符串一样,多图使用分号隔开即可,后台收到后直接将流文件转换成图片保存即可。